Pagina di Bash Man: kill <pid> vs kill -9 <pid>


25

La mia pagina man non documenta la differenza tra

kill <pid>

e

kill -9 <pid>

Dato che fanno cose diverse, perché il -9 non è documentato nella killmanpage? Ho pensato che forse fosse una cosa specifica per la shell, quindi ho guardato anche nella pagina man di bash, ma senza fortuna.

Domanda bonus: cosa fa il -9?

Risposte:


40

killinvia solo un segnale al processo dato. Gli -9dice quale segnale inviare.

Numeri diversi corrispondono a segnali comuni diversi. SIGINT, ad esempio, è 2, quindi per inviare un processo il SIGINTsegnale emette il comando

$ kill -2 <pid>

La manpage qui specifica:

Il segnale predefinito per kill è TERM.

La manpage fornisce anche una tabella di segnali che è possibile inviare. Secondo questa tabella, TERMè 15, quindi questi sono tutti equivalenti:

kill <pid>
kill -15 <pid>
kill -TERM <pid>

L'avviso 9 è il KILLsegnale.

   Name   Number  Action
   -----------------------
   ALRM      14   exit
   HUP        1   exit
   INT        2   exit
   KILL       9   exit  this signal may not be blocked
   PIPE      13   exit
   POLL           exit
   PROF           exit
   TERM      15   exit     [Default]
   USR1           exit
   USR2           exit
   VTALRM         exit
   STKFLT         exit  may not be implemented
   PWR            ignore    may exit on some systems
   WINCH          ignore
   CHLD           ignore
   URG            ignore
   TSTP           stop  may interact with the shell
   TTIN           stop  may interact with the shell
   TTOU           stop  may interact with the shell
   STOP           stop  this signal may not be blocked
   CONT           restart   continue if stopped, otherwise ignore
   ABRT       6   core
   FPE        8   core
   ILL        4   core
   QUIT       3   core
   SEGV      11   core
   TRAP       5   core
   SYS            core  may not be implemented
   EMT            core  may not be implemented
   BUS            core  core dump may fail

   XCPU           core  core dump may fail
   XFSZ           core  core dump may fail

8
Il segnale predefinito ( kill <pid>) è TERM.
pesante

9
I numeri sono generalmente, ma non sempre, gli stessi su diversi sistemi basati su Unix. È consigliabile utilizzare il nome del segnale. Cioè, invece di kill -9, usa kill -KILL.
mpez0,

7
Aggiungerei che i segnali KILLe STOPsono i cosiddetti segnali non catchable. Ciò significa che quando un TERMsegnale viene inviato a un processo, è in grado di catturarlo ed eseguire varie operazioni di "arresto" che deve eseguire. Il KILLsegnale interrompe immediatamente il processo.
Neo,

5
È meglio usare prima il segnale predefinito e usare solo -9 se il valore predefinito non funziona. Il motivo di ciò è che -9 non può essere catturato, quindi il programma non ha alcuna possibilità di eseguire alcuna pulizia. Inoltre, trovi la documentazione per i segnali sul tuo sistema inman 7 signal
In pausa fino a nuovo avviso.

7

Il segnale predefinito è TERM che consente al programma che viene ucciso di catturarlo e fare un po 'di pulizia prima di uscire. Anche un programma può ignorarlo, se è scritto in questo modo.

Se si specifica -9 o KILL come segnale, il programma non può catturarlo, effettuare alcuna pulizia o ignorarlo. Dovrebbe essere usato solo come ultima risorsa.

Per vedere l'elenco dei numeri e dei nomi dei segnali in Bash, usare kill -l(lettera ell).


4

Sto usando Ubuntu Linux.

In sostanza, i comandi Kill inviano il segnale al processo per terminarlo. Per semplificare le complesse aspettative comportamentali del comando di uccisione dei computer di ogni giorno ha varie opzioni insieme ad esso.

Come spiegato sopra con tutte le opzioni di uccisione dei numeri corrispondenti alla sua definizione.

Vorrei aggiungere alcune righe ad esso.

 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    

Come vedi sopra, queste sono tutte opzioni di kill che otterrai se esegui Ubuntu Linux.

Ma alcuni segnali di kill sono comuni a tutti i gusti * NIX.

kill -9 è l'opzione SIGKILL e il kernel non può ignorare questo segnale, il che significa che ha onore a questa opzione -9 o SIGKILL ed esce immediatamente dal processo. Ricorda che questo processo non può essere gestito dai programmi applicativi.

kill -15 d'altra parte invierà il segnale SIGTERM, il che significa che attenderà che il processo si arresti in modo pulito prima di uscire. Questo è il segnale predefinito.

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.