2011-09-02 8 views
8

Comprendo che uno zombie viene creato quando un processo non si ripulisce bene (le sue risorse non vengono recuperate/raccolte). Dopo aver chiamato fork() per creare un nuovo processo, il genitore dovrebbe sempre chiamare waitpid su quel processo per ripulirlo.UNOMI Zombi e Demoni

Ho anche appreso che un demone viene creato mediante la forchetta di un bambino creato da essa stesso e poi lasciando morire il bambino. Apparentemente il processo di init (pid # 1) in UNIX prenderebbe la custodia del processo una volta fatto questo.

Quello che voglio sapere è che, per quanto ne so, quando un genitore muore, pulisce automaticamente il bambino - quindi come viene creato uno zombie in primo luogo?

In secondo luogo, il genitore di un processo demonizzato si spegne, quindi perché il processo demonizzato non è considerato uno zombie?

+2

Chiunque vuole dare un commento per l'anonimo downvote e chiudi la richiesta? Sento che è una domanda abbastanza solida. –

+2

Si potrebbe sostenere che questa è più una domanda serverfault, ma la gestione dei processi è rilevante per la programmazione * nix, quindi non vedo molti problemi con esso. –

+0

I processi il cui genitore è morto sono orfani, non zombi. Gli zombi sono i "morti viventi"; gli orfani possono essere membri produttivi della società. –

risposta

13

Quello che voglio sapere è - per quanto ne so, quando un genitore muore pulisce automaticamente il bambino - così come fa uno zombie vengono creati in primo luogo?

No, il genitore non pulisce i bambini automaticamente. Ogni volta che un processo termina, tutti i suoi figli (in esecuzione o zombi) vengono adottati dal processo init.

Gli zombi sono processi figlio che sono già terminati ed esistono quando il loro genitore è ancora in vita ma non ha ancora chiamato wait per ottenere il loro stato di uscita. Se il genitore muore (e non ha chiamato wait), tutti i bambini zombi vengono adottati dal processo init e alla fine chiama lo wait su tutti loro per raccoglierli, in modo che scompaiano dalla tabella del processo.

L'idea alla base del mantenimento di un processo di zombi consiste nel mantenere le strutture di dati appropriate in merito alla conclusione del processo nel caso in cui il genitore venga mai interessato tramite uno wait.

In secondo luogo, il genitore di un processo demonizzato si spegne, quindi perché il processo daemonizzato considerato uno zombie non è ?

I genitori dei processi daemonized muoiono, ma il processo daemonized stacca dal terminale di controllo e diventa un capogruppo processo tramite la chiamata di sistema setsid.

+0

Lime di prelievo: tutti i processi tranne il processo 1 sono processi figli e uno zombie è semplicemente uno dei "morti viventi", un processo che è morto ma il cui genitore non ha ancora aspettato di raccogliere lo stato del cadavere.Uno zombie è un problema perché occupa uno slot nella tabella dei processi che non può essere riutilizzato finché il cadavere non è stato ripulito (dal processo padre originale o dal sistema se il genitore muore senza attendere). In casi estremi (200.000 zombi), possono seriamente rallentare un sistema. Ho avuto questo problema all'inizio di quest'anno: tre zombi al minuto da un processo di sistema. Aggiornamento O/S! –

+1

Un'altra aggiunta a questa bella risposta: una ragione per mantenere gli zombi è che il PID non deve essere riutilizzato finché il genitore non ha elaborato il messaggio di terminazione. – Drunix

0

Bene, quando viene avviato un processo figlio, viene creata una voce a livello di kernel insieme al suo id di processo padre. A causa di qualsiasi motivo (mano del server, processo genitore eliminato dalla fine dell'applicazione, ecc.), Processo genitore eliminato e processo figlio lasciato. Il kernel non può pulire questo processo. Solo il processo genitore autorizzato a farlo. Perché tale processo è ancora in una tabella del kernel, quindi sta anche mangiando risorse ma non facendo nulla. Quindi, si chiama zombi.

+1

Nelle versioni precedenti di Solaris, solo il processo padre è autorizzato a pulire il processo figlio, ma da processo di avvio di Solaris 11 è possibile pulire tutto il processo zombi stesso se il genitore muore. – sumana

Problemi correlati