Control+ Zзаписывает управляющий символ susp
, который посылает сигнал SIGTSTP
(номер 20 в Linux amd64, 24 в Solaris amd64, 18 во FreeBSD amd64... лучше не обращаться к сигналам по номеру, так как это не переносимо) ко всем процессам в группе процессов переднего плана терминала.
Вы можете отправить сигнал об остановке процесса из командной строки с помощью команды kill
.
kill -s STOP <pid>
(где
— идентификатор процесса, который вы хотите приостановить) или, если вы хотите адресовать все процессы программы с определенным именем (технически, все процессы, имя которых соответствует задано расширенное регулярное выражение):
pkill -STOP xterm
(где xterm
— пример имени).
Когда вам нужно возобновить процессы, отправьте сигнал SIGCONT
таким же образом.
Отправьте сигнал STOP
процессам, которые вы хотите приостановить.
Позже вы можете отправить сигнал CONT
, чтобы разблокировать приостановленный процесс.
Например:
pkill -STOP terminal
Это приостановит все процессы терминала
.
pkill -CONT terminal
Это разблокирует все процессы с именем terminal
.
Если вы хотите остановить все процессы, которые имеют /dev/pts/12
в качестве управляющего терминала (, включая все приоритетные и фоновые задания, запущенные в этом терминале и оболочке ), вы можете сделать:
pkill -STOP -t pts/12
Это также приведет к отстранению лидера сеанса. В некоторых случаях это может быть возобновлено автоматически. Например, GNU screen
возобновляет работу лидера сеанса, как только обнаруживает, что он был приостановлен.
Если вы хотите отправить сигнал SIGTSTP группе процессов переднего плана этого терминала, например ^Z
, вы должны сделать:
kill -s TSTP -- "-$pgid"
Где $pgid
— идентификатор группы процессов этой группы процессов переднего плана. В Linux и BSD в списке вы можете узнать, что это такое, запустив ps -o tpgid= -p "$pid"
, где $pid
— это идентификатор любого процесса, который имеет этот терминал в качестве управляющего терминала. В большинстве систем любой из этих процессов также может определить это с помощью tcgetpgrp()
.
В обоих случаях вы возобновляете эти процессы, отправляя сигнал SIGCONT вместо SIGSTOP/SIGTSTP.