Como dice, envía la señal a todos los miembros del grupo de proceso de la persona que llama.
Los grupos de procesos se utilizan para implementar el control de trabajos en el shell (se pueden usar para otras cosas, pero el control interactivo del trabajo del shell es la razón principal de su existencia).
Notarás que cuando escribes Ctrl-C, todos los procesos de los trabajos actuales se eliminan, no solo el que los inició. Además, eso no mata los trabajos en segundo plano.
Eso se logra con los grupos de procesos. Un trabajo es un grupo de procesos iniciados por un shell que el shell puede poner en segundo plano o en primer plano (establecido como el grupo de proceso en primer plano del terminal o no), y matar como un todo.
Puede averiguar sobre los identificadores de grupo de proceso y los identificadores de sesión con ps -j
( j
para Jcontrol ob).
Para eliminar el grupo de proceso de PGID $x
, debe hacer lo siguiente:
kill -- "-$x"
kill 0
mata al grupo de procesos de la persona que llama.
Tenga en cuenta que si lo hace: /bin/kill 0
el shell iniciará un nuevo trabajo para ejecutar ese kill
comando, por kill
lo que solo se suicidará.
kill
Sin embargo, generalmente es un shell incorporado, por kill
lo que matará al grupo de procesos del shell.
Sin embargo, cuando el shell es interactivo, es el proceso que gestiona los grupos de procesos, por lo que normalmente no hay otro proceso en el grupo de procesos del shell. Todos los procesos iniciados por el shell están en otros grupos de procesos:
$ 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
Arriba, sleep
y ps
están en dos grupos de procesos diferentes, uno en segundo plano, uno en primer plano y son diferentes del grupo de proceso del shell.
Sin embargo, podrías hacer:
(man kill & sleep 1; ps -j; kill 0)
El shell interactivo comenzaría un nuevo grupo de procesos para ese subshell, y tanto el subshell como el man (y los otros comandos iniciados por man como su buscapersonas, groff ...) estarían en el mismo grupo de procesos, por kill 0
lo que funcionaría allí. (lo sleep
anterior es dar tiempo suficiente para que se inicie el buscapersonas para que podamos verlo en la ps -j
salida antes de matarlo).
SIGTERM
al proceso, lo que ha hecho. Elman
comando ha elegido ignorarlo.