Sono sempre molto riluttante a eseguire kill -9
, ma vedo che altri amministratori lo fanno quasi di routine.
Immagino che ci sia probabilmente una via di mezzo ragionevole, quindi:
- Quando e perché dovrebbe
kill -9
essere usato? Quando e perché no? - Cosa provare prima di farlo?
- Che tipo di debug di un processo "bloccato" potrebbe causare ulteriori problemi?
Risposta accettata:
In genere, 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 completare ciò che sta facendo e ripulire, potrebbe lasciare file danneggiati (o altro stato) in giro che non sarà in grado di capire una volta riavviato.
strace
/truss
, strace
e gdb
sono generalmente buone idee per esaminare il motivo per cui un processo bloccato è bloccato. (truss -u
su Solaris è particolarmente utile; Trovo ltrace
troppo spesso presenta argomenti alle chiamate della libreria in un formato inutilizzabile.) Solaris ha anche un utile /proc
basati su strumenti, alcuni dei quali sono stati portati su Linux. (pstack
è spesso utile).