Как он говорит, он посылает сигнал всем членам группы процессов вызывающей стороны.
Группы процессов используются для реализации управления заданиями в оболочке (они могут использоваться для других целей, но основной причиной их существования является интерактивное управление заданиями оболочки).
Вы заметите, что при вводе Ctrl-Cвсе процессы текущих заданий уничтожаются, а не только те, которые их запустили. Кроме того, это не убивает фоновые задания.
Это достигается с помощью групп процессов. Задание - это группа процессов, запускаемых оболочкой, которые оболочка может помещать в фоновом или переднем плане (задана как группа процессов переднего плана терминала или нет) и уничтожать целиком.
Вы можете узнать об идентификаторах групп процессов и идентификаторах сеансов с помощью ps -j
( j
для Jконтроля ob).
Чтобы убить группу процессов PGID $x
, вы делаете:
kill -- "-$x"
kill 0
убивает группу процессов вызывающей стороны.
Обратите внимание, что если вы сделаете:, /bin/kill 0
оболочка запустит новое задание для выполнения этой kill
команды, поэтому kill
убьет только себя.
kill
обычно это встроенная оболочка, поэтому kill
убивает группу процессов оболочки.
Однако, когда оболочка является интерактивной, это процесс, управляющий группами процессов, поэтому обычно в группе процессов оболочки нет других процессов. Все процессы, запускаемые оболочкой, находятся в других группах процессов:
$ sleep 1000 &
[1] 22746
$ ps -j
PID PGID SID TTY TIME CMD
22735 22735 22735 pts/23 00:00:00 zsh
22746 22746 22735 pts/23 00:00:00 sleep
22749 22749 22735 pts/23 00:00:00 ps
Выше, sleep
и ps
находятся в двух разных группах процессов, одна в фоновом режиме, одна на переднем плане, и они отличаются от группы процессов оболочки.
Вы могли бы сделать хотя:
(man kill & sleep 1; ps -j; kill 0)
Интерактивная оболочка запускает новую группу процессов для этого подоболочки, и и подоболочка, и команда man (и другие команды, запускаемые человеком, такие как ваш пейджер, groff ...) будут в одной группе процессов, поэтому kill 0
будут работать там. ( sleep
вышеприведенное - дать достаточно времени для запуска пейджера, чтобы мы могли увидеть его в ps -j
выводе, прежде чем убить его).
SIGTERM
процесс, который он сделал. Командаman
решила проигнорировать это.