Come dice, invia il segnale a tutti i membri del gruppo di processi del chiamante.
I gruppi di processi vengono utilizzati per implementare il controllo dei processi nella shell (possono essere utilizzati per altre cose, ma il controllo interattivo dei processi della shell è la ragione principale della loro esistenza).
Noterai che quando digiti Ctrl-C, tutti i processi dei lavori correnti vengono eliminati, non solo quello che li ha avviati. Inoltre, ciò non uccide i processi in background.
Ciò si ottiene con i gruppi di processi. Un lavoro è un gruppo di processi avviati da una shell che la shell può mettere in background o in primo piano (impostata come gruppo di processi in primo piano del terminale o meno) e uccidere nel suo insieme.
È possibile scoprire gli ID dei gruppi di processo e gli ID di sessione con ps -j
( j
per il Jcontrollo ob).
Per eliminare il gruppo di processi di PGID $x
, eseguire:
kill -- "-$x"
kill 0
uccide il gruppo di processi del chiamante.
Nota che se lo fai: /bin/kill 0
la shell avvierà un nuovo lavoro per eseguire quel kill
comando, quindi kill
si ucciderà solo.
kill
di solito è una shell incorporata, quindi kill
ucciderà il gruppo di processi della shell.
Tuttavia, quando la shell è interattiva, è il processo che gestisce i gruppi di processi, quindi in genere non vi sono altri processi nel gruppo di processi della shell. Tutti i processi avviati dalla shell sono in altri gruppi di processi:
$ 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
Sopra, sleep
e ps
sono in due diversi gruppi di processi, uno in background, uno in primo piano e sono diversi dal gruppo di processi della shell.
Puoi fare comunque:
(man kill & sleep 1; ps -j; kill 0)
La shell interattiva avvierebbe un nuovo gruppo di processi per quella subshell e sia la subshell che man (e gli altri comandi avviati da man come il tuo cercapersone, groff ...) sarebbero nello stesso gruppo di processi, quindi kill 0
funzionerebbe lì. (quanto sleep
sopra è di dare abbastanza tempo per l'avvio del cercapersone in modo che possiamo vederlo ps -j
nell'output prima di ucciderlo).
SIGTERM
al processo, che ha fatto. Ilman
comando ha scelto di ignorarlo.