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