Perché non dovrei usare 'kill -9' / SIGKILL


14

Pubblicando questa domanda perché sono stato sorpreso di non aver trovato una risposta diretta; mi scuso se questo è un duplicato - ho fatto un look!

L'ho sentito kill -9o kill -SIGKILLè male, ma non capisco perché. Se non dovessi kill -9cosa dovrei fare per terminare un processo?


2
La premessa della domanda è sbagliata. SIGKILL è solo uno strumento. È raccomandato in alcune situazioni e non raccomandato in altre situazioni (come lo sono tutti gli altri strumenti).
kubanczyk,

@kubanczyk certo, ma è uno strumento spesso mal applicato e usato senza capirne lo scopo. Ho visto molte discussioni in cui A dice " Basta kill -9esso ", OP dice " grande, che ha funzionato! Mi ricordo che da ora in! ", E B viene a mettere in guardia " attesa kill -9è pericoloso! " Solo dopo il fatto.
dimo414,

Risposte:


15

SIGKILLestrae il tappeto dal processo in corso, terminandolo immediatamente. Per programmi molto semplici va bene; in pratica tuttavia ci sono pochissimi programmi "semplici".

Sotto le copertine anche i programmi apparentemente banali fanno ogni sorta di lavoro transazionale di cui hanno bisogno per ripulire prima di terminare (pensa al finallyblocco in Java e in altri linguaggi di programmazione), come la chiusura di handle di risorse, l'eliminazione di file temporanei e l'eliminazione di dati da memoria su disco. Non puoi prevedere quando un programma potrebbe fare qualcosa del genere.

Se sei fortunato non noterai nulla di sbagliato se invii un messaggio SIGKILL, ma non puoi essere fortunato per sempre e potresti non sapere che qualcosa è andato storto fino a quando non è troppo tardi per recuperare ciò che è stato perso.

Non dovresti quasi mai dover inviare un SIGKILLe dovresti essere sicuro di aver esaurito le tue alternative prima di farlo. In molti casi il riavvio (che alla fine invierà messaggi SIGKILLdi posta elettronica a programmi che si comportano in modo inappropriato) è più sicuro che inviare manualmente un utente SIGKILL. Probabilmente posso contare da una parte il numero di volte che ho avuto bisogno di inviare un SIGKILL(e probabilmente tutto il mio fare).

In generale puoi usare Ctrl+ C(che invia il processo in primo piano a SIGINT) o SIGTERM(come in "termina") per indicare a un processo di interrompere ciò che sta facendo e di uscire.

Qualche ulteriore lettura:

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.