Comme il est dit, il envoie le signal à tous les membres du groupe de processus de l'appelant.
Les groupes de processus sont utilisés pour implémenter le contrôle des travaux dans le shell (ils peuvent être utilisés pour d'autres choses, mais le contrôle interactif des travaux du shell est la principale raison de leur existence).
Vous remarquerez que lorsque vous tapez Ctrl-C, tous les processus des travaux en cours sont tués, pas seulement celui qui les a démarrés. De plus, cela ne tue pas les tâches d'arrière-plan.
Cela est réalisé avec des groupes de processus. Un travail est un groupe de processus démarré par un shell que le shell peut mettre en arrière-plan ou au premier plan (défini comme groupe de processus de premier plan du terminal ou non) et tuer dans son ensemble.
Vous pouvez en savoir plus sur les identifiants de groupe de processus et les identifiants de session avec ps -j
( j
pour le Jcontrôle ob).
Pour tuer le groupe de processus de PGID $x
, vous effectuez:
kill -- "-$x"
kill 0
tue le groupe de processus de l'appelant.
Notez que si vous faites /bin/kill 0
:, le shell lancera un nouveau travail pour exécuter cette kill
commande, donc kill
ne se tuera que lui-même.
kill
est généralement un shell intégré, donc kill
tuera le groupe de processus du shell.
Cependant, lorsque le shell est interactif, c'est le processus qui gère les groupes de processus, donc généralement il n'y a pas d'autre processus dans le groupe de processus du shell. Tous les processus démarrés par le shell, se trouvent dans d'autres groupes de processus:
$ 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
Ci-dessus, sleep
et ps
sont dans deux groupes de processus différents, un en arrière-plan, un en premier plan et ils sont différents du groupe de processus du shell.
Vous pourriez cependant faire:
(man kill & sleep 1; ps -j; kill 0)
Le shell interactif démarrerait un nouveau groupe de processus pour ce sous-shell, et le sous-shell et man (et les autres commandes démarrées par man comme votre pager, groff ...) seraient dans le même groupe de processus, donc kill 0
y travailleraient. (ce qui sleep
précède est de donner suffisamment de temps pour que le pager démarre afin que nous puissions le voir dans la ps -j
sortie avant de le tuer).
SIGTERM
au processus, ce qu'il a fait. Laman
commande a choisi de l'ignorer.