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.