Stop ai processi Zombie – II parte –


I PROCESSI ZOMBIE E NON SOLO

Ovviamente “uccidere” un processo significa terminare anche gli eventuali figli di quel processo. E’ possibile, che in seguito a dei “bugs” un applicazione produca dei processi zombie: esiste un padre (applicazione) che genera dei processi figli in maniera anomala. Per visualizzarli, potete utilizzare il comando ps e la presenza nella colonna STAT di una lettera “Z” ne indica l’esistenza. In un primo momento, questo tipo di processi anomali non preoccupano, ma nel tempo l’aumento potrebbe determinare un problema di carico del sistema (esaurimento dei PID disponibili) e quindi un riempimento della tabella dei processi. Per eliminare questo tipo di problema bisogna trovare i processi padri ed eliminarli con un segnale SIGTERM o SIGKILL e quindi di conseguenza termineranno i processi figli.

In tale contesto, si distinguono i processi zombie (di cui abbiamo parlato nelle righe precedenti) dai processi orfani, quest’ultimi vengono adottati dal processo init. Per trovare i zombie basta trovare nella colonna STAT la lettera Z, mentre per i processi orfani basta visualizzare i processi con PID numero 1 (init).

Con il comando top eseguito dal superutente (o root) potete visualizzare il numero di zombie presenti in un sistema GNU/Linux. Dato, che non sono riuscito a trovare un qualche sistema GNU/Linux con la presenza di un processo zombie ho dovuto crearlo. Di fatto un processo zombie rimane attivo nel sistema poiché il processo genitore che lo ha generato non ha il rilevato il segnale SIGCHLD. Di seguito la modalità per trovare il processo padre che genera i processi zombie.

Da terminale (shell) si digiti il seguente comando:

$ ps aux | grep defunct

Il sistema restituisce una riga con il numero di PID 10425. A questo punto, come possiamo vedere di seguito, abbiamo ricavato il PID del processo padre che ha generato il processo zombie con PID 10425. Per identificare il padre digitiamo il seguente comando:

$ ps -def | grep 10425
ruggero 10425 10322  0 Mar17 ?        00:00:00 [yyyy] <defunct>

Come si può notare il numero PID 10425 appartiene al processo figlio, mentre il numero 10322 è del processo padre che lo ha generato. Ora, vediamo a chi appartiene il processo 10322 con il seguente comando:

$ ps aux | grep 10322
ruggero 10322  0.0  4.5 10669 38504 ?        S    Mar17   10:50 xxxxxx

Il processo in questione è xxxxx, quindi lo possiamo terminare con il seguente comando:

$ kill -9 10322
A questo punto anche i processi figli legati a questo processo padre termineranno e così anche il 10425.

No votes yet.
Please wait...
Voting is currently disabled, data maintenance in progress.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

cinque × due =

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.