Gli zombi sono processi MORTI. Non possono essere "uccidi" (non puoi uccidere i MORTI). Tutti i processi alla fine muoiono e quando lo fanno diventano zombi. Non consumano quasi risorse, cosa che ci si aspetta perché sono morti! Il motivo degli zombi è che il genitore (processo) dello zombi può recuperare lo stato di uscita dello zombi e le statistiche sull'uso delle risorse. Il genitore segnala al sistema operativo che non ha più bisogno dello zombi usando una delle chiamate di sistema wait ().
Quando un processo muore, i suoi processi figlio diventano tutti figli del processo numero 1, che è il processo init. Init sta `` sempre '' aspettando che i bambini muoiano, in modo che non rimangano zombi.
Se hai processi di zombi significa che quegli zombi non sono stati attesi dai loro genitori (guarda PPID visualizzato da ps -l
). Hai tre opzioni: Correggi il processo genitore (fallo attendere); uccidere il genitore; o vivere con esso. Ricorda che vivere con esso non è così difficile perché gli zombi occupano poco più di una riga in più nell'output di ps.
Gli zombi possono essere identificati nell'output dal comando ps Unix dalla presenza di una "Z" nella colonna STAT. Gli zombi che esistono da più di un breve periodo di tempo in genere indicano un bug nel programma genitore. Come con altre perdite, la presenza di alcuni zombi non è preoccupante in sé, ma può indicare un problema che potrebbe diventare grave sotto carichi più pesanti.
Per rimuovere gli zombi da un sistema, il segnale SIGCHLD può essere inviato manualmente al genitore, usando il comando kill. Se il processo genitore rifiuta ancora di raccogliere lo zombi, il passo successivo sarebbe rimuovere il processo genitore. Quando un processo perde il suo genitore, init diventa il suo nuovo genitore. Init esegue periodicamente la chiamata di sistema di attesa per raccogliere eventuali zombi con init come genitore.
Esistono anche processi orfani che sono un processo informatico il cui processo padre è terminato o terminato.
Un processo può diventare orfano durante l'invocazione remota quando il processo client si arresta in modo anomalo dopo aver effettuato una richiesta del server.
Gli orfani sprecano risorse del server e possono potenzialmente lasciare un server in difficoltà (Questa è la maggiore differenza di risorse tra zombi e orfani (tranne se si vede un film di zombie orfani). Tuttavia ci sono diverse soluzioni al problema del processo orfano:
Lo sterminio è la tecnica più comunemente usata; in questo caso il processo orfano viene ucciso.
La reincarnazione è una tecnica in cui le macchine cercano periodicamente di individuare i genitori di eventuali calcoli remoti; a quel punto i processi orfani vengono uccisi.
La scadenza è una tecnica in cui ogni processo viene assegnato per un certo periodo di tempo prima di essere ucciso. Se necessario, un processo può "chiedere" più tempo per terminare prima che scada il tempo assegnato.
Un processo può anche essere orfano in esecuzione sulla stessa macchina del processo principale. In un sistema operativo simile a UNIX qualsiasi processo orfano verrà immediatamente adottato dallo speciale processo di sistema "init". Questa operazione si chiama ri-genitorialità e si verifica automaticamente. Anche se tecnicamente il processo ha il processo "init" come suo genitore, viene comunque chiamato processo orfano poiché il processo che lo ha originariamente creato non esiste più.
Ulteriori informazioni:
http://wiki.answers.com/Q/What_is_Zombie_Process_and_Orphan_Process#ixzz1PCN9vojU
http://www.linuxsa.org.au/tips/zombies.html
http://www.brighthub.com/computing/linux/articles/79186.aspx
Come identificare e terminare il processo di sospensione, quando il sistema si blocca e reagisce lentamente all'input dell'utente?
Uccidere un processo in esecuzione in una macchina Ubuntu in remoto da una macchina Windows che si trova nella LAN