В man page
ней говорится:
kill [ -s signal | -p ] [ -a ] [ -- ] pid ...
pid... Specify the list of processes that kill should signal. Each pid can be one of five things:
0 All processes in the current process group are signaled
И я попытался так в bash:
$ man kill &
[1] 15247
$
[1]+ Stopped man kill
$ kill 0
$ ps
15247 pts/41 00:00:00 man
Здесь 0
используется как pid
. Как я понял, kill 0
будут убиты все процессы в текущем процессе, который включает в себя pid15247
. Тем не менее, это ничего не сделало в этом примере. У кого-нибудь есть идеи о том, как его использовать?
process
kill
process-groups
Firegun
источник
источник
SIGTERM
процесс, который он сделал. Командаman
решила проигнорировать это.ps -j
чтобы увидеть группы процессов.kill -0
(обратите внимание на приборную), что другая тема, на StackOverflow и здесь на Unix.SE .Ответы:
Как он говорит, он посылает сигнал всем членам группы процессов вызывающей стороны.
Группы процессов используются для реализации управления заданиями в оболочке (они могут использоваться для других целей, но основной причиной их существования является интерактивное управление заданиями оболочки).
Вы заметите, что при вводе Ctrl-Cвсе процессы текущих заданий уничтожаются, а не только те, которые их запустили. Кроме того, это не убивает фоновые задания.
Это достигается с помощью групп процессов. Задание - это группа процессов, запускаемых оболочкой, которые оболочка может помещать в фоновом или переднем плане (задана как группа процессов переднего плана терминала или нет) и уничтожать целиком.
Вы можете узнать об идентификаторах групп процессов и идентификаторах сеансов с помощью
ps -j
(j
для Jконтроля ob).Чтобы убить группу процессов PGID
$x
, вы делаете:kill 0
убивает группу процессов вызывающей стороны.Обратите внимание, что если вы сделаете:,
/bin/kill 0
оболочка запустит новое задание для выполнения этойkill
команды, поэтомуkill
убьет только себя.kill
обычно это встроенная оболочка, поэтомуkill
убивает группу процессов оболочки.Однако, когда оболочка является интерактивной, это процесс, управляющий группами процессов, поэтому обычно в группе процессов оболочки нет других процессов. Все процессы, запускаемые оболочкой, находятся в других группах процессов:
Выше,
sleep
иps
находятся в двух разных группах процессов, одна в фоновом режиме, одна на переднем плане, и они отличаются от группы процессов оболочки.Вы могли бы сделать хотя:
Интерактивная оболочка запускает новую группу процессов для этого подоболочки, и и подоболочка, и команда man (и другие команды, запускаемые человеком, такие как ваш пейджер, groff ...) будут в одной группе процессов, поэтому
kill 0
будут работать там. (sleep
вышеприведенное - дать достаточно времени для запуска пейджера, чтобы мы могли увидеть его вps -j
выводе, прежде чем убить его).источник
kill -- -$x
на самом деле говоритbash: kill: (-63531) - No such process
в bash 5.0.11 (1) -релиз на MacOS 10.14, но он уверен, что процесс существует и работает.pkill -P
работает отличноps -j
чтобы узнать о pgids