That's the equivalent of pressing Ctrl+Z in other commands.
It suspends the shell and gives control back to parent shell or process if any.
bash-4.4$ cd /
zsh: suspended (signal) bash
 + continued bash
The feature comes from csh, the shell of BSD (where job control comes from) in the early 80s.
ksh, it's a builtin alias for
kill -s STOP $$ (yes, without the quotes!)
In your case,
bash was probably the one started directly by the terminal emulator. And your terminal emulator didn't expect the process to be suspended.
bash was a session leader. If the session leader is suspended, if we take the view of old time terminals, the user will have no way to resume it.
bash addresses that by refusing to
suspend if it's a login shell. But in your case, your terminal emulator probably doesn't start
bash in login mode, so that safeguard is not in place.
mksh don't have the problem because they send a
SIGTSTP (the one also sent upon Ctrl+Z) signal like csh instead of
SIGSTOP (and to the caller's process group for
mksh like in csh, and to the main process group of the shell for
zsh, not the
$$ process alone).
SIGTSTP is ignored when delivered to an orphaned process group, and the group of the leader qualifies. The idea is that SIGTSTP should not suspend something that is not resumable by a user.
yash, one can also use
suspend to have a subshell suspend itself:
$ (set -x; sleep 1; suspend; sleep 2)
+ sleep 1
 + Stopped(SIGSTOP) (set -x; sleep 1; suspend; sleep 2)
 (set -x; sleep 1; suspend; sleep 2)
+ sleep 2
That wouldn't work with
zsh that sends the SIGTSTP to the main process group instead of the caller. In any shell that has
kill builtin, one can always use
kill -s TSTP 0 instead.