Uno zombi può avere orfani? I bambini orfani saranno disturbati dalla mietitura dello zombi?


27

A quanto ho capito, un processo di zombi è morto ma esiste ancora come segnaposto nella tabella dei processi fino a quando il suo genitore (o initse lo zombi è esso stesso un orfano) controlla il suo stato di uscita.

E la mia comprensione dei processi orfani è che sono processi che sono ancora vivi e in esecuzione ma il cui genitore è morto.

Dato che uno zombi è già morto, i suoi figli sarebbero considerati orfani, no? Sarebbero interessati a raccogliere lo zombi? In particolare, li initadotteranno come suoi figli solo dopo la raccolta dello zombi o sarebbero adottati non appena il genitore diventasse uno zombi?


Ha senso che i processi secondari vengano ricompensati initnon appena il loro genitore muore (e questo include il diventare uno zombi). Uno zombi non si prenderà cura dei suoi figli. Non farà nulla. Sono solo informazioni sullo stato di morte che fluttuano in un pidpunto.
PSkocik,

Ciò significa che gli orfani di uno zombi non possono diventare zombi, perché vengono immediatamente curati da loro init?
Wildcard l'

Corretta. O se diventano zombi, sarà solo per un periodo di tempo minuscolo fino a quando non initli raggiungerà.
PSkocik,

6
Non vedo l'ora che
Nathan Osman,

@NathanOsman, sarebbe stato meraviglioso ma sembra un non-andare. :(
Wildcard il

Risposte:


15

A quanto ho capito, un processo di zombi è morto ma esiste ancora come segnaposto nella tabella dei processi fino a quando il suo genitore (o init se lo zombi è esso stesso un orfano) controlla il suo stato di uscita.

Corretta.

E la mia comprensione dei processi orfani è che sono processi che sono ancora vivi e in esecuzione ma il cui genitore è morto.

Corretta.

Dato che uno zombi è già morto, i suoi figli sarebbero considerati orfani, no?

Sì. Quando il genitore muore, è morto. Per quanto riguarda i suoi figli, non importa se il genitore rimane zombi: i bambini diventano orfani nel momento in cui il genitore muore, e quindi perdono qualsiasi connessione con il genitore.

Sarebbero interessati a raccogliere lo zombi? In particolare, init li adotterà come suoi figli solo dopo la raccolta dello zombi o sarebbero adottati non appena il genitore diventasse uno zombi?

No, e quest'ultimo, come sopra.


8

Se i risultati sperimentali lo faranno, sembra che almeno systemdinit raccoglierà gli orfani dello zombi appena può:

foo.c:

#include <unistd.h>

int main(void)
{
    pid_t child = fork();
    if (child < 0)
        return -1;
    if (child == 0)
    {
        pid_t grand_child = fork();
        if (grand_child < 0)
            return -1;
        if (grand_child == 0)
            sleep (1000);
        else
            return 0;
    }
    else
        sleep (1000);
    return 0;
}

In un terminale:

$ gcc -o foo foo.c
$ ./foo

In un altro terminale:

$ pgrep foo                         
25548
25549
25550
$ pstree -pa 25548
foo,25548
  └─(foo,25549)
$ pstree -psa 25550
systemd,1
  └─foo,25550
$ ps -o stat,pid -p $(pgrep -d, foo)
STAT   PID
S+   25548
Z+   25549
S+   25550

E bene dovrebbe, questo è il suo lavoro.
Gilles 'SO- smetti di essere malvagio' il

@Gilles certo, collezionare gli orfani è il lavoro di init, ma c'è qualche standard che specifica quando dovrebbe essere raccolto? Altrimenti immagino che l'implementazione potrebbe avere un certo margine di manovra.
Muru,

Non penso che ci sia uno standard scritto per quello. POSIX afferma solo che "L'ID del processo padre di tutti i processi figlio esistenti e i processi zombie del processo chiamante devono essere impostati sull'ID processo di un processo di sistema definito dall'implementazione", non dice quale sia quel processo di sistema dovrebbe fare, o anche come viene informato quel processo di sistema. Nei sistemi Unix, quel processo di sistema è PID 1, riceve SIGCLD e raccoglie i processi non appena ci si aggira.
Gilles 'SO- smetti di essere malvagio' il

@Gilles significa che potrebbe esserci qualche init (probabilmente kinemortophobic) da qualche parte che decide di rinviare raccogliendo i figli di uno zombi fino a quando lo zombi scompare?
Muru,

Potresti anche ricordare a Gilles di unix.stackexchange.com/a/177361/5132 . Sono passati quasi 4 anni, adesso. ☺
JdeBP
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.