C'è una differenza tra
kill -9 212121
e
kill 212121
C'è una differenza tra
kill -9 212121
e
kill 212121
Risposte:
La pagina man di Ubuntu per kill
spiega lo scopo del -9
passaggio (certamente in modo piuttosto discontinuo):
Name Num Action Description
KILL 9 exit cannot be blocked
Ecco cosa dice un'altra pagina man .
Il comando
kill
invia il segnale specificato al processo o al gruppo di processi specificato. Se non viene specificato alcun segnale, ilTERM
segnale viene inviato. IlTERM
segnale ucciderà i processi che non catturano questo segnale. Per altri processi, potrebbe essere necessario utilizzare il segnaleKILL
(9
), poiché questo segnale non può essere catturato.
Pertanto, l'utilizzo -9
dell'interruttore garantisce che il processo venga effettivamente interrotto. Anche se un processo congelato o non risponde potrebbe non rispondere a un semplice TERM
segnale, morirà quando viene inviato un KILL
segnale.
Il comando kill invierà un segnale definito a un processo con una data identità (PID):
kill -<signal> <pid>
Ovviamente possiamo solo uccidere i processi che possediamo, mentre root può uccidere tutti i processi. Vedi Wikipedia per un bel riassunto dei segnali di calcolo.
I segnali che kill
possono essere inviati sono elencati nella manpage . Il segnale può essere rappresentato per nome o per numero. Se non viene emesso alcun segnale, il segnale predefinito 15 risp. TERM
viene utilizzato.
Tutti e tre i comandi seguenti sono quindi identici:
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
La differenza tra SIGTERM
e SIGKILL
è il modo in cui un'applicazione può agire sul segnale:
TERM
: un'applicazione sarà in grado di terminare, ovvero eseguire correttamente una routine di spegnimento. KILL
: le applicazioni vengono arrestate e uccise immediatamente (il che potrebbe comportare la perdita di dati o l'aumento di app per segnalare in alcuni casi un presunto arresto anomalo).Si noti che tutti i seguenti sono sinonimi:
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
Vale la pena sottolineare che nel mondo della gestione del segnale, SIGKILL è uno dei pochi unici gestiti dal sistema operativo e non dal programma. Quando esegui kill -9
, non stai dicendo all'applicazione di terminare se stessa, invece stai dicendo al sistema operativo di interrompere l'esecuzione del programma, indipendentemente da ciò che il programma sta facendo.
Dopo l' invio di SIGKILL , il programma verrà immediatamente arrestato. Se sono in esecuzione chiamate del kernel (ad esempio File IO) per conto del programma, tali chiamate possono o non possono continuare fino al termine, a seconda della chiamata, ma il programma stesso non verrà più eseguito. Si noti che le attività tracciate o le attività in esecuzione in un debugger potrebbero comportarsi diversamente qui.
L'altro segnale che non può essere bloccato è SIGSTOP che ha un effetto simile, ma blocca invece il programma; puoi inviare SIGCONT in seguito per riprenderlo. Questo comportamento è completamente controllato dal sistema operativo e il programma non riceve alcuna notifica preventiva.
Tutti gli altri segnali vengono inviati al programma; può gestirli come desidera, oppure se ignora il segnale, viene seguito un comportamento predefinito.
Ecco alcuni segnali utili che potresti trovarti a inviare a un processo:
kill
e killall
. cat /etc/passwd | head -n1
, invierà SIGPIPE al cat
processo dopo la stampa della prima riga, causando la cat
chiusura prima del completamento dell'intero file.Mentre tutti questi segnali si verificano "naturalmente" nella propria impostazione, è possibile utilizzare il segnale per simulare una condizione per ottenere il risultato desiderato.
Ad esempio, se vuoi terminare la sessione SSH di qualcuno, puoi semplicemente terminare il processo, ma così facendo impedirai che aggiorni il suo file HISTORY, che può essere importante per motivi di sicurezza. Ma invece se lo invii SIGHUP , il processo supporrà che la connessione sia terminata ed eseguirà la sua pulizia standard.
SIGQUIT
, dove l'azione predefinita è scaricare il core e terminare. Questo può essere usato se un programma sta facendo qualcosa di molto sbagliato, devi fermarlo immediatamente e vorresti poterlo eseguire il debug in un secondo momento.
kill -9 Significato: il processo verrà ucciso dal kernel; questo segnale non può essere ignorato. 9 indica il segnale KILL che non è comprensibile o ignorabile
Usi: SIGKILL singal
Kill Significato: il comando kill senza alcun segnale passa il segnale 15, che termina il processo in modo normale.
Usi: segnale SIGTERM , che può essere gestito dai programmatori
kill -9