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

La pagina dell'uomo non documenta la differenza tra

kill <pid> 

e

 kill -9 <pid> 

Poiché questi fanno le cose diverse perché è il -9 non documentato nella man page di kill ? Pensavo forse che fosse una cosa specifica delle gabbie, così ho guardato anche nella pagina del bash, ma senza fortuna.

Domanda bonus: cosa fa il -9?

kill invia un segnale al process dato. Il -9 indica quale segnale submit.

Diversi numbers corrispondono a diversi segnali comuni. SIGINT , ad esempio, è 2, quindi per submit un process il segnale SIGINT emette il command

 $ kill -2 <pid> 

Il man page qui specifica:

Il segnale di default per uccidere è TERM.

Il manpage fornisce anche una tabella di segnali che puoi submit. Secondo questa tabella, TERM è di 15 , quindi sono tutti equivalenti:

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

Avviso 9 è il segnale KILL .

  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 

Il segnale di default è TERM che permette al programma di essere ucciso per prenderlo e fare qualche pulizia prima di uscire. Un programma può ignorarlo anche se è scritto in questo modo.

Specifica -9 o KILL come il segnale non consente al programma di catturarlo, di eseguire qualsiasi pulizia o ignorarlo. Dovrebbe essere utilizzato solo come ultima risorsa.

Per visualizzare l'elenco dei numbers e dei nomi dei segnali in Bash, utilizzare kill -l (lettera ell).

Sto usando Ubuntu Linux.

I comandi uccidono fondamentalmente inviano il segnale per elaborarlo per finirlo. Per semplificare le complesse aspettative comportmentali del task quotidiano di uccisione, il command ha diverse opzioni insieme ad esso.

Come spiegato in precedenza con tutte le opzioni di numero di kill 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 si vede sopra queste sono tutte le possibilità di uccisione che si otterrà se si esegue Ubuntu Linux.

Ma certi segnali di uccisione sono comuni in tutti i sapori * NIX.

kill -9 è l'opzione SIGKILL e il kernel non può ignorare questo segnale, il che significa che ha onorato l'opzione -9 o SIGKILL e chiude immediatamente il process. Ricorda che questo process non può essere gestito da programmi applicativi.

kill -15, invece, invierà il segnale SIGTERM, il che significa che attende il process di spegnimento immediato prima dell'output. Questo è il segnale di default.