Как работает Ctrl + Z из командной строки, а не с клавиатуры? [закрыто]

-2
16.08.2017, 11:43
3 ответа

Control+ Zзаписывает управляющий символ susp, который посылает сигнал SIGTSTP(номер 20 в Linux amd64, 24 в Solaris amd64, 18 во FreeBSD amd64... лучше не обращаться к сигналам по номеру, так как это не переносимо) ко всем процессам в группе процессов переднего плана терминала.

Вы можете отправить сигнал об остановке процесса из командной строки с помощью команды kill.

kill -s STOP <pid>

(где — идентификатор процесса, который вы хотите приостановить) или, если вы хотите адресовать все процессы программы с определенным именем (технически, все процессы, имя которых соответствует задано расширенное регулярное выражение):

pkill -STOP xterm

(где xterm— пример имени).

Когда вам нужно возобновить процессы, отправьте сигнал SIGCONTтаким же образом.

4
28.01.2020, 05:14

Отправьте сигнал STOPпроцессам, которые вы хотите приостановить.

Позже вы можете отправить сигнал CONT, чтобы разблокировать приостановленный процесс.

Например:

pkill -STOP terminal

Это приостановит все процессы терминала.

 pkill -CONT terminal

Это разблокирует все процессы с именем terminal.

0
28.01.2020, 05:14

Если вы хотите остановить все процессы, которые имеют /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.

3
28.01.2020, 05:14

Теги

Похожие вопросы