Como diz, ele envia o sinal para todos os membros do grupo de processos do chamador.
Os grupos de processos são usados para implementar o controle de tarefas no shell (eles podem ser usados para outras coisas, mas o controle interativo de tarefas de shell é o principal motivo de sua existência).
Você notará que, ao digitar Ctrl-C, todos os processos dos trabalhos atuais são eliminados, não apenas o que os iniciou. Além disso, isso não mata os trabalhos em segundo plano.
Isso é alcançado com grupos de processos. Um trabalho é um grupo de processos iniciados por um shell que o shell pode colocar em segundo plano ou em primeiro plano (definido como o grupo de processos em primeiro plano do terminal ou não) e matar como um todo.
Você pode descobrir sobre os IDs de grupo de processos e de sessão com ps -j
( j
para Jcontrole de ob).
Para matar o grupo de processos do PGID $x
, você faz:
kill -- "-$x"
kill 0
mata o grupo de processos do chamador.
Observe que, se você fizer /bin/kill 0
:, o shell iniciará um novo trabalho para executar esse kill
comando, e kill
somente se matará.
kill
normalmente é um shell embutido, portanto kill
, matará o grupo de processos do shell.
No entanto, quando o shell é interativo, é o processo que gerencia os grupos de processos; portanto, normalmente não há outro processo no grupo de processos do shell. Todos os processos iniciados pelo shell estão em outros grupos de processos:
$ 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
Acima sleep
e ps
estão em dois grupos de processos diferentes, um em segundo plano, um em primeiro plano e eles são diferentes do grupo de processos do shell.
Você poderia fazer:
(man kill & sleep 1; ps -j; kill 0)
O shell interativo iniciaria um novo grupo de processos para esse subshell, e o subshell e man (e os outros comandos iniciados por man como seu pager, groff ...) estariam no mesmo grupo de processos, portanto kill 0
, trabalhariam lá. (o que foi sleep
dito acima é para dar tempo suficiente para o pager iniciar, para que possamos vê-lo na ps -j
saída antes de matá-lo).
SIGTERM
para o processo, o que foi feito. Oman
comando optou por ignorá-lo.