En el man page
, dice:
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
Y lo intenté así en bash:
$ man kill &
[1] 15247
$
[1]+ Stopped man kill
$ kill 0
$ ps
15247 pts/41 00:00:00 man
Aquí 0
se usa como pid
. Como entendí, kill 0
matará todos los procesos en el proceso actual, que incluye pid15247
. Sin embargo, no hizo nada en este ejemplo. ¿Alguien tiene ideas sobre cómo usarlo?
process
kill
process-groups
Arma de fuego
fuente
fuente
SIGTERM
al proceso, lo que ha hecho. Elman
comando ha elegido ignorarlo.ps -j
para ver los grupos de procesos.kill -0
(nota del guión), que es un tema diferente, en StackOverflow y aquí en Unix.SE .Respuestas:
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 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 esekill
comando, porkill
lo que solo se suicidará.kill
Sin embargo, generalmente es un shell incorporado, porkill
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:
Arriba,
sleep
yps
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:
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í. (losleep
anterior es dar tiempo suficiente para que se inicie el buscapersonas para que podamos verlo en laps -j
salida antes de matarlo).fuente
kill -- -$x
en realidad dicebash: kill: (-63531) - No such process
en bash 5.0.11 (1) -lanzamiento en MacOS 10.14 pero es seguro que el proceso existe y se está ejecutando.pkill -P
funciona bienps -j
para averiguar sobre pgids