Jest to odpowiednik naciskania Ctrl+Zinnych poleceń.
Zawiesza powłokę i daje kontrolę nad powłoką macierzystą lub procesem, jeśli istnieje.
Przykład:
zsh$ bash
bash-4.4$ cd /
bash-4.4$ suspend
zsh: suspended (signal) bash
zsh$ fg
[1] + continued bash
bash-4.4$ pwd
/
Ta funkcja pochodzi z csh, powłoki BSD (skąd pochodzi kontrola zadań) na początku lat 80 .
W AT&T kshjest to wbudowany alias dla kill -s STOP $$( tak, bez cudzysłowów! )
W twoim przypadku bashprawdopodobnie był on uruchamiany bezpośrednio przez emulator terminala. I twój emulator terminalu nie spodziewał się, że proces zostanie zawieszony.
To bashbył lider sesji. Jeśli lider sesji zostanie zawieszony, jeśli weźmiemy pod uwagę stare terminale, użytkownik nie będzie mógł go wznowić.
bashrozwiązuje ten suspendproblem, odmawiając, jeśli jest to powłoka logowania. Ale w twoim przypadku emulator terminala prawdopodobnie nie uruchamia się bashw trybie logowania, więc nie ma zabezpieczenia.
zshi mkshnie mają problemu, ponieważ wysyłają sygnał SIGTSTP(ten również przesłany Ctrl+Z) jak csh zamiast SIGSTOP(i do grupy procesów wywołującej dla mkshnp. w csh, i do głównej grupy procesów powłoki dla zsh, nie samego $$procesu ). SIGTSTPjest ignorowany po dostarczeniu do osieroconej grupy procesów, a grupa lidera kwalifikuje się. Chodzi o to, że SIGTSTP nie powinien zawieszać czegoś, czego użytkownik nie może wznowić.
W mkshlub yashmożna również suspendzawiesić podpowłokę:
$ (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
To nie zadziałałoby, zshponieważ wysyła SIGTSTP do głównej grupy procesów zamiast do wywołującego. W każdej killwbudowanej powłoce zawsze można użyć kill -s TSTP 0zamiast tego.