Quali sono i processi di zombi?


138

Con comandi simili tope basati sulla gui System Monitorposso vedere che al momento ho diversi processi di zombi.

Quali sono i processi di zombi?

Influiscono sulle prestazioni del sistema o sull'applicazione per cui sono zombi. Usano troppa memoria o memoria?


39
Sono processi che vogliono mangiare la tua cpu;)
Luis Alvarado,

8
per pranzo ... :)
RolandiXor

3
Questi processi sono morti ma non sepolti.
Prateek Joshi,

2
Mangia la mia CPU ?! È davvero terrificante!
Håvard Geithus,

Risposte:


162

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:

  1. Lo sterminio è la tecnica più comunemente usata; in questo caso il processo orfano viene ucciso.

  2. 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.

  3. 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


18
Ekhm! Puoi uccidere i morti! Devi solo mirare alla testa. O ci hanno mentito tutto il tempo?
Marcin Kaminski,

1
initfa appello waita tutti i suoi processi figlio: zombi, orfani (adottati) e biologici (auto-generati)?
Bleeding Fingers,

1
acc. alla Seconda Guerra Mondiale usa il camuffamento: P
عثمان غني

Per favore, dai una medaglia a @MarcinKaminski!
Andrea,

20

I processi di zombi (anche mostrati come <defunct>) non sono affatto processi reali. Sono solo voci nella tabella dei processi del kernel. Questa è l'unica risorsa che consumano. Non consumano alcuna CPU o RAM. L'unico pericolo di avere zombi è rimanere senza spazio nella tabella dei processi (è possibile utilizzare cat /proc/sys/kernel/threads-maxper vedere quante voci sono consentite sul proprio sistema).

Appaiono solo quando il loro processo genitore (cioè processo quale fork()'edloro) è vivo, ma non ha ancora chiamato la wait()funzione di sistema. Una volta che il genitore muore, gli zombi sono wait()'edper inite scompaiono.


4
Lo topscreenshot in questa domanda sembra contraddirti? Lì, lo zombi sembra usare il 100% di 1 CPU, ma senza memoria.
Torben Gundtofte-Bruun,

7

Quando una persona child processtermina, la sua morte viene comunicata al suo genitore in modo che il genitore possa intraprendere alcune azioni appropriate.

Uno processche sta aspettando che il suo genitore accetti il ​​suo codice di ritorno è chiamato processo zombi .

Hanno completed their executionma ha ancora un entrynel process table.


1

I processi Zombie sono processi che hanno smesso di funzionare ma la loro voce nella tabella dei processi esiste ancora perché il processo padre non l'ha recuperato tramite il syscall di attesa. Tecnicamente ogni processo che termina è uno zombi per un periodo di tempo molto breve, ma potrebbero vivere più a lungo.

I processi di zombi più longevi si verificano quando i processi genitore non chiamano il syscall di attesa al termine del processo figlio. Una situazione in cui ciò si verifica è quando il processo parent è scritto male e omette semplicemente la chiamata di attesa o quando il processo parent muore prima del figlio e il nuovo processo parent non chiama wait su di esso. Quando un genitore di un processo muore prima del figlio, il sistema operativo assegna il processo figlio al processo "init" o PID 1. Il processo init "adotta" il processo figlio e diventa il suo genitore. Ciò significa che ora quando il processo figlio esce dal nuovo genitore (init) deve chiamare waitto ottenere il suo codice di uscita o la voce della tabella del processo rimane per sempre e diventa uno zombi

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.