Generalmente, dovresti usare kill
(abbreviazione di kill -s TERM
, o sulla maggior parte dei sistemi kill -15
) prima di kill -9
(kill -s KILL
) per dare al processo di destinazione la possibilità di ripulire se stesso. (I processi non possono catturare o ignorare SIGKILL
, ma possono e spesso catturano SIGTERM
.) Se non dai al processo la possibilità di finire quello che sta facendo e ripulire, potrebbe lasciare file corrotti (o altro stato) in giro che non sarà in grado di capire una volta riavviato.
strace
/truss
, ltrace
e gdb
sono generalmente buone idee per capire perché un processo bloccato è bloccato. (truss -u
su Solaris è particolarmente utile; Trovo ltrace
troppo spesso presenta argomenti alle chiamate di libreria in un formato inutilizzabile.) Solaris ha anche utili /proc
strumenti basati su Linux, alcuni dei quali sono stati portati su Linux. (pstack
è spesso utile).
Randal Schwartz pubblicava spesso "Uso inutile di (x)" nelle liste. Uno di questi post riguardava kill -9
. Include motivi e una ricetta da seguire. Ecco una versione ricostruita (citata sotto).
(Citazione abominio)
No no no. Non usare kill -9.
Non dà al processo la possibilità di essere pulito:
1) chiudere le connessioni socket
2) ripulire i file temporanei
3) informare i suoi figli che sta andando via
4) ripristinare le caratteristiche del terminale
e così via e così via e così via.
Generalmente, invia 15 e attendi un secondo o due, e se non funziona, invia 2, e se non funziona, invia 1. Se non funziona, RIMUOVERE IL BINARIO perché il programma si comporta male!
Non usare kill -9. Non tirare fuori la mietitrebbia solo per riordinare il vaso di fiori.
Solo un altro uso inutile di Usenet,
(.firma)
Dovrebbe sempre essere OK fare kill -9
, proprio come dovrebbe essere sempre OK spegnere tirando il cavo di alimentazione. Potrebbe essere antisociale e lasciare un po' di recupero da fare, ma dovrebbe funzionare ed è uno strumento potente per gli impazienti.
Lo dico come qualcuno che proverà prima il semplice kill (15), perché dà a un programma la possibilità di fare un po 'di pulizia - forse semplicemente scrivendo su un registro "uscita su sig 15". Ma non accetterò alcuna lamentela sul cattivo comportamento su un'uccisione -9.
Il motivo:molti clienti lo fanno per cose che i programmatori preferirebbero e poi no. Il test random kill -9 è uno scenario di test buono ed equo, e se il tuo sistema non lo gestisce, il tuo sistema è guasto.