Це еквівалент натискання 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замість цього.