In che modo Linux gestisce il processo zombie


12

I processi Zombie sono creati in sistemi Unix / Linux. Possiamo rimuoverli tramite il killcomando.

Ma esiste un meccanismo di pulizia integrato in Linux per gestire i processi di zombi?

Risposte:


18

I processi di zombi sono già morti. Non puoi ucciderli. Il killcomando o la chiamata di sistema non ha alcun effetto su un processo di zombi. (Puoi far sparire uno zombi kill, ma devi sparare al genitore, non allo zombi, come vedremo tra un minuto.)

Un processo di zombi non è in realtà un processo, è solo una voce nella tabella dei processi. Non ci sono altre risorse associate al processo zombie: non ha memoria o codice in esecuzione, non tiene aperti i file, ecc.

Quando un processo termina, l'ultima cosa da fare, dopo aver ripulito tutte le altre risorse, è la voce nella tabella del processo. Questa voce viene mantenuta in giro, formando uno zombi, per consentire al processo genitore di tenere traccia dello stato di uscita del bambino. Il genitore legge lo stato di uscita chiamando una delle waitfamiglie di syscalls; a questo punto, lo zombi scompare. waitSi dice che la chiamata raccolga il bambino, estendendo la metafora di uno zombi morto ma in qualche modo ancora non completamente trasformato nell'aldilà. Il genitore può anche indicare che non gli interessa (ignorando il segnale SIGCHLD o chiamando sigactioncon il SA_NOCLDWAITflag), nel qual caso la voce nella tabella dei processi viene eliminata immediatamente quando il bambino muore.

Quindi uno zombi esiste solo quando un processo è morto e il suo genitore non ha ancora chiamato wait. Questo stato può durare solo finché il genitore è ancora in esecuzione. Se il genitore muore prima del figlio o muore senza leggere lo stato del figlio, il processo genitore dello zombi viene impostato sul processo con PID 1, ovvero init. Uno dei compiti di initè quello di chiamare waitin un ciclo e quindi raccogliere qualsiasi processo di zombi lasciato indietro dal suo genitore.


6

Non si tratta di killun processo di zombi, poiché è già morto.

I processi degli zombi devono essere modificati waitdai loro genitori, in modo che il loro stato di uscita sia raccolto.

L'unico "meccanismo di pulizia incorporato" che esiste in Linux, funziona nel caso in cui qualsiasi processo genitore muoia prima di raccogliere lo stato di uscita dei propri figli. In questo caso, ogni figlio viene ereditato dal initprocesso, che verrà waitacquisito dal figlio, raccoglierà il suo stato di uscita e rimuoverà la voce nella tabella del processo.


3

Non appena il genitore di un processo muore, il processo diventa orfano, ignorando se si tratta di uno zombi o meno. Cosa succede agli orfani? Ricevono un nuovo genitore, chiamato init. initvolontà waitsu ogni orfano che ha raccolto, raccogliendo così l'orfano (che potrebbe anche essere stato uno zombi).


1
No. Essere precisi, initnon uccide alcun processo. Spetta solo waitai suoi figli raccogliere il loro status.
Chrk,

1
@chrk, Philipp: il solito termine è mietere .
Gilles 'SO- smetti di essere malvagio'

1

No, non esiste un meccanismo di pulizia integrato per gli zombi. Gli zombi vanno nel paradiso degli zombi una volta ucciso il loro genitore. Fino ad allora, il sistema operativo li mantiene per riportare lo stato di uscita al genitore.


quindi .. questo non ha effetti negativi sulla memoria, ecc?

1
in realtà, quando il genitore degli stampi zombie, il initprocesso prende il sopravvento e chiamerà waitesso

No, tutte le risorse allocate al processo vengono rilasciate, ad eccezione della voce nella tabella del processo.
Unxnut
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.