Perché il numero 9 nel comando kill -9 in unix? [chiuso]


101

Capisco che sia fuori tema, non sono riuscito a trovare da nessuna parte online e stavo pensando che forse i guru della programmazione nella comunità potrebbero saperlo.
Di solito uso

kill -9 pid

per uccidere il lavoro. Mi sono sempre chiesto l'origine di 9. Ho cercato online e dice

"9 Significa KILL segnale che non è catturabile o ignorabile. In altre parole segnalerebbe al processo (alcune applicazioni in esecuzione) di uscire immediatamente" (fonte: http://wiki.answers.com/Q/What_does_kill_-9_do_in_unix_in_its_entirety )

Ma perché 9? e gli altri numeri? c'è qualche significato storico oa causa dell'architettura di Unix?


6
Penso che questa domanda appartenga meglio a superuser.com
Rafał Rawicki

Risposte:


89

Vedere l'articolo di wikipedia sui segnali Unix per l'elenco degli altri segnali. SIGKILL ha appena ottenuto il numero 9.

Puoi anche usare gli mnemonici, come i numeri:

kill -SIGKILL pid

6
In passato (con questo intendo 4.xBSD o giù di lì) non si potevano usare gli mnemonici con il comando della shell, motivo per cui il numero 9 è scritto in un sacco di vecchi script di shell polverosi.
zwol


50

Penso che una risposta migliore qui sia semplicemente questa:

mike@sleepycat:~☺  kill -l
 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    

Per quanto riguarda il "significato" di 9 ... direi che probabilmente non ce n'è. Secondo The Linux Programming Interface (p 388) :

Ogni segnale è definito come un numero intero univoco (piccolo), che inizia sequenzialmente da 1. Questi numeri interi sono definiti con nomi simbolici nella forma SIGxxxx. Poiché i numeri effettivi utilizzati per ciascun segnale variano a seconda delle implementazioni , sono questi nomi simbolici che vengono sempre utilizzati nei programmi.


32

Per prima cosa devi sapere cosa sono i segnali nei sistemi Unix-like (ci vorranno solo pochi minuti).

I segnali sono interruzioni software inviate a un programma (in esecuzione) per indicare che si è verificato un evento importante.

Gli eventi possono variare dalle richieste dell'utente agli errori di accesso alla memoria illegale. Alcuni segnali, come il segnale di interruzione, indicano che un utente ha chiesto al programma di fare qualcosa che non rientra nel normale flusso di controllo.

Ci sono diversi tipi di segnali che possiamo usare - per ottenere un elenco completo di tutti i segnali disponibili / possibili usa il comando " $ kill -l ": inserisci qui la descrizione dell'immagine

Nell'uscita sopra è chiaramente visibile che ogni Segnale ha un " numero di segnale " (es. 1, 2, 3) e un " nome del segnale " (es. SIGUP, SIGINT, SIGQUIT) ad esso associati. Per una ricerca dettagliata di ciò che fa ogni singolo segnale, visita questo link .

Infine, arrivando alla domanda "Perché il numero 9 nel comando kill -9 ":

Esistono diversi metodi per inviare segnali a un programma o uno script. Uno dei metodi comunemente usati per inviare il segnale è usare il comando kill - la sintassi di base è:

$ kill -signal pid

Dove segnale è il numero o il nome del segnale, seguito dall'ID di processo (pid) a cui verrà inviato il segnale.

Ad esempio - -SIGKILL (o -9 ), il segnale interrompe immediatamente il processo.

$ kill -SIGKILL 1001

e

$ kill -9 1001

entrambi i comandi sono la stessa cosa, cioè sopra abbiamo usato il 'nome del segnale', e successivamente abbiamo usato 'numero del segnale'.

Verdetto : è possibile scegliere se utilizzare il "nome del segnale" o il "numero del segnale" con il comando kill .


19

È un riferimento a "Revoulution 9" dei Beatles. Una raccolta di clip audio messe insieme e rumori trovati, questa registrazione presenta John Lennon che ripete più e più volte "Numero 9, Numero 9 ..." Inoltre, questa canzone attirò ulteriormente l'attenzione nel 1969 quando si scoprì che, quando suonata al contrario, John sembrava per dire "Accendimi, uomo morto ..."

Pertanto il nono segnale era destinato a essere il più letale dei segnali di uccisione.


17
Davvero non posso dire se lo stai tirando fuori dal culo o se c'è una possibilità che sia vero.
Jonathon Reinhart

La fine di quell'argomento è davvero epica, in particolare i due commenti prima del mio. Mi sono anche imbattuto in quell'articolo sull'uccisione
Gull_Code

Voglio così tanto che sia vero ... :)
nafas

La persona che dice "numero 9" non è Lennon. Sospetto che ci sia altrettanta verità nel resto della storia (cioè nessuna) ma chi lo sa :)
Stephen Kennedy,

8

C'è un elenco molto lungo di segnali Unix, che puoi visualizzare su Wikipedia . In modo un po 'confuso, puoi effettivamente utilizzare killper inviare qualsiasi segnale a un processo. Ad esempio, kill -SIGSTOP 12345forza il processo 12345 a sospendere la sua esecuzione, mentre gli kill -SIGCONT 12345dice di riprenderlo. Una versione leggermente meno criptica di kill -9is kill -SIGKILL.


2
Viene chiamata anche la chiamata di sistema sottostante che invia segnali kill. Probabilmente perché il comportamento predefinito per la maggior parte del set di segnali originale (numeri da 1 a 15) era terminare il processo.
zwol

4

Non penso che ci sia alcun significato per il numero 9. Inoltre, nonostante la credenza comune, killviene utilizzato non solo per uccidere i processi ma anche per inviare un segnale a un processo. Se sei davvero curioso puoi leggere qui e qui .


3

why kill -9: il numero 9 nell'elenco dei segnali è stato scelto per essere SIGKILL in riferimento a "uccidere le 9 vite di un gatto".


3

SIGKILLutilizzare per terminare il processo. SIGKILLnon può essere ignorato o gestito. In Linux, modi per dare SIGKILL.

kill -9 <process_pid> 
kill -SIGKILL <process_pid> 
killall -SIGKILL <process_name>
killall -9 <process_name>

1

Digita il comando kill -l sulla tua shell

lo troverai al 9 ° numero [ 9) SIGKILL ], quindi puoi usare kill -9 o kill -SIGKILL

SIGKILL è un segnale di uccisione sicuro, non può essere spostato, ignorato o gestito. Funziona sempre con il suo comportamento predefinito, che è di terminare il processo.


1

Il -9è il signal_number e specifica che il messaggio kill inviato deve essere di tipo KILL (non catchable, non ignorable).

kill -9 pid

Che è lo stesso di sotto.

kill -SIGKILL pid

Senza specificare un signal_number, il valore predefinito è -15, che è TERM (segnale di terminazione software). La digitazione kill <pid>è la stessa di kill -15 <pid>.


0

Entrambi sono uguali a kill -sigkill processID, kill -9 processID. È fondamentalmente per l'interruzione forzata del processo.


0

ci sono alcuni processi che non possono essere uccisi come questo "kill% 1". se dobbiamo terminare quel processo, viene usato un comando speciale per uccidere quel processo che è kill -9. es. apri vim e interrompi se usando ctrl + z poi vedi i lavori e dopo applicare il processo kill questo processo non verrà terminato quindi qui usiamo il comando kill -9 per terminare.

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.