Quali sono i processi zombi?

132

Con comandi come top e% gui% co_de posso vedere che al momento ho diversi processi di zombi.

Quali sono i processi zombi?

Influenzano le prestazioni del sistema o dell'applicazione a cui sono zombi. Usano troppa memoria o memoria?

    
posta Jesper 14.06.2011 - 00:27

4 risposte

154

Gli zombi sono processi DEAD. Non possono essere "uccidi" (non puoi uccidere i MORTI). Alla fine tutti i processi muoiono e quando lo fanno diventano zombi. Non consumano quasi risorse, il che è prevedibile perché sono morti! La ragione degli zombi è che il genitore (processo) dello zombie può recuperare lo stato di uscita dello zombi e le statistiche sull'utilizzo 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 figli del processo numero 1, che è il processo di init. L'iniziativa è "sempre" in attesa che i bambini muoiano, in modo che non rimangano come 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 scelte: correggi il processo genitore (fallo aspettare); uccidere il genitore; o conviverci. 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 Unix ps dalla presenza di una "Z" nella colonna STAT. Gli zombi che esistono per più di un breve periodo di tempo in genere indicano un bug nel programma padre. Come con altre perdite, la presenza di pochi zombi non è preoccupante di per sé, ma potrebbe indicare un problema che si aggraverebbe in caso di carichi più pesanti.

Per rimuovere gli zombi da un sistema, il segnale SIGCHLD può essere inviato al genitore manualmente, usando il comando kill. Se il processo genitore si rifiuta ancora di raccogliere lo zombi, il prossimo passo sarebbe rimuovere il processo genitore. Quando un processo perde il suo genitore, init diventa il suo nuovo genitore. Iniz esegue periodicamente la chiamata di sistema di attesa per raccogliere tutti gli zombi con init come genitore.

Esistono anche processi orfani che sono un processo informatico il cui processo principale è terminato o terminato.

Un processo può diventare orfano durante la chiamata remota quando il processo client si blocca dopo aver effettuato una richiesta del server.

Gli orfani sprecano risorse del server e possono potenzialmente lasciare un server nei guai (questa è la più grande differenza di risorse tra zombi e orfani (eccetto se vedi qualche film di zombi orfano.) 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 tentano periodicamente di localizzare i genitori di qualsiasi calcolo remoto; a quale punto i processi orfani vengono uccisi.

  3. L'espirazione è una tecnica in cui ogni processo viene assegnato per un certo periodo di tempo prima di essere ucciso. Se necessario, un processo può richiedere più tempo per terminare prima che scada il tempo a disposizione.

Un processo può anche essere reso 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 è chiamata re-parenting e si verifica automaticamente. Anche se tecnicamente il processo ha il processo "init" come genitore, viene comunque chiamato processo orfano poiché il processo che lo ha originariamente creato non esiste più.

Ulteriori informazioni:

link

link

link

Come identificare e uccidi il processo di sospensione, quando il sistema si blocca e reagisce lentamente all'input dell'utente?

Uccisione un processo in esecuzione in una macchina Ubuntu in remoto da una macchina Windows che è in LAN

    
risposta data Luis Alvarado 14.06.2011 - 00:39
20

I processi di Zombi (anche visualizzati come <defunct> ), non sono affatto processi reali. Sono solo voci nella tabella dei processi del kernel. Questa è l'unica risorsa che consumano. Non consumano CPU o RAM. L'unico pericolo di avere zombi sta esaurendo lo spazio nella tabella dei processi (puoi usare cat /proc/sys/kernel/threads-max per vedere quante voci sono permesse sul tuo sistema).

Appaiono solo quando il loro processo genitore (vale a dire che processa fork()'ed li) è vivo, ma non ha ancora chiamato la funzione di sistema wait() . Una volta che il genitore muore, gli zombi sono wait()'ed per init e scompaiono.

    
risposta data vartec 14.06.2011 - 11:36
6

Quando termina child process , la sua morte viene comunicata al genitore in modo che il genitore possa prendere qualche azione appropriata.

Un process che è in attesa che il genitore accetti il suo codice di ritorno è chiamato un processo zombie .

Hanno completed their execution ma hanno ancora entry in process table .

    
risposta data Prateek Joshi 14.10.2015 - 18:11
1

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

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

    
risposta data 01.11.2018 - 17:20

Leggi altre domande sui tag