Cosa fa effettivamente kill 0?


10

Nel man page, dice:

          0      All processes in the current process group are signaled

E ho provato così:

$ man kill &
[1] 15247
$
[1]+  Stopped                 man kill
$ kill 0
$ ps
15247 pts/41   00:00:00 man

Come ho capito, kill 0ucciderà tutti i processi nel processo corrente, che include pid15247. Tuttavia, in questo esempio non ha fatto nulla. Qualcuno ha idee su come usarlo?


Che shell stai usando?
Errore irreversibile

@FatalError Sto usando Bash
Firegun l'

Risposte:


4

Non sono riuscito a trovare una nota su come kill 0si comporta nella mia pagina man kill (debian).

Ma ho due commenti:

(1) "Gruppo di processo" potrebbe non essere quello che ti aspetti. È possibile visualizzare l'ID gruppo di processi (PGID) con ps -o "%p %P %r %c %a":

$ ps -o "%p %P %r %c %a"
  PID  PPID  PGID COMMAND         COMMAND
12124 12123 12124 zsh             -zsh
12212 12124 12212 man             man kill
12226 12212 12212 less            less
12302 12124 12302 ps              ps -o %p %P %r %c %a

Quindi, maninsieme allo strumento di visualizzazione cercapersone ( less) fa parte dello stesso gruppo di processi, ma è diverso da quello della shell (zsh nel mio caso).

(2) Probabilmente ci sono due killcomandi diversi . Uno integrato in bash(vedi bash (1), Sezione "SHELL BUILTIN COMMANDS") e l'esterno /bin/kill. Questi due possono comportarsi diversamente! È possibile indicare esplicitamente quale si desidera eseguire digitando builtin killo command killanziché kill. Il comando esterno è anche possibile eseguire specificando il percorso: /bin/kill.


1
PPIDè l' ID del processo principale , che spesso è, ma non necessariamente, l'ID del gruppo di processi. La colonna corretta è PGID, che non appare psnell'output predefinito ; devi usare l' -oopzione per costruire un formato personalizzato che lo includa.
Chepner,

@chepner: hai assolutamente ragione, grazie! Sono stato confuso dalla mia pagina man ps (1) di Cygwin, che afferma: "-l, --long: show uids di processo, ppids, pgids, winpids". Peccato per me, ho modificato la mia risposta di conseguenza. Tuttavia, la mia affermazione (solo man + pager hanno lo stesso PGID) ora è corretta, come previsto. (Prima ancora che quella frase fosse sbagliata :-()
mpy

1

Per interrompere tutti i processi e disconnettersi, immettere:

kill -kill 0

Questo invia il segnale 9, il segnale SIGKILL, a tutti i processi con un ID gruppo di processo uguale all'ID gruppo di processi mittenti. Poiché la shell non può ignorare il segnale SIGKILL, anche questa interrompe la shell di login e si disconnette

Questo è il manuale AIX di IBM, ma forse il concetto si applica.

Questa funzionalità non esiste in Linux "kill" (come posso vedere); ma è così che si comporta "uccidi":

Uccidere 0 non sta uccidendo il pid 0. Invece è un'opzione in kill per uccidere tutti i processi nel gruppo corrente . Con il tuo comando stai uccidendo tutto nell'ID del gruppo di processo (GID) della shell che ha emesso il comando kill.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.