Это эквивалентно нажатию Ctrl+Zв других командах.
Он приостанавливает оболочку и возвращает управление родительской оболочке или процессу, если таковые имеются.
Пример:
zsh$ bash
bash-4.4$ cd /
bash-4.4$ suspend
zsh: suspended (signal) bash
zsh$ fg
[1] + continued bash
bash-4.4$ pwd
/
Эта функция появилась в csh, оболочке BSD (откуда происходит управление заданиями) в начале 80-х годов .
В AT & T kshэто встроенный псевдоним для kill -s STOP $$( да, без кавычек! )
В вашем случае это bashбыл, вероятно, тот, который был запущен непосредственно эмулятором терминала. И ваш эмулятор терминала не ожидал, что процесс будет приостановлен.
Это bashбыл лидер сессии. Если лидер сеанса приостановлен, если мы возьмем представление о старых временных терминалах, у пользователя не будет возможности возобновить его.
bashадреса, отказываясь, suspendесли это оболочка входа в систему. Но в вашем случае ваш эмулятор терминала, вероятно, не запускается bashв режиме входа в систему, так что защита не на месте.
zshи mkshне имеют проблемы, потому что они посылают SIGTSTP(тот, который также был отправлен Ctrl+Z) сигнал, такой как csh вместо SIGSTOP(и в группу процессов вызывающей стороны для mkshкак в csh, и в главную группу процессов оболочки для zsh, а не сам $$процесс ). SIGTSTPигнорируется при доставке в осиротевшую группу процессов, а группа лидера квалифицируется. Идея состоит в том, что SIGTSTP не должен приостанавливать то, что не может быть возобновлено пользователем.
В mkshили yash, также можно использовать suspendдля приостановки подоболочки:
$ (set -x; sleep 1; suspend; sleep 2)
+ sleep 1
+ suspend
[1] + Stopped(SIGSTOP) (set -x; sleep 1; suspend; sleep 2)
$ fg
[1] (set -x; sleep 1; suspend; sleep 2)
+ sleep 2
Это не сработает zsh, так как SIGTSTP отправляется основной группе процессов, а не вызывающей стороне. В любой оболочке, которая имеет killвстроенную функцию, всегда можно использовать kill -s TSTP 0вместо нее .