Hei
Jeg prøvde å lage en zombie prosessen med følgende program:
Code:
int main(void)
{
pid_t pid;
int status;
if ((pid = fork()) < 0)
perror("fork error");
else if (pid == 0){ /* child process*/
exit(0);
}
printf("child process ID: %d\n", pid);
sleep(10);
return 0;
}
Jeg kan observere "Z" stat med ps-kommandoen, men dette zombie prosessen (barnet prosessen) kun finnes i varighet fra sin oppsigelse til den overordnede avslutning. Jeg kan ikke vente () barnet prosess i den overordnede, så hvorfor ikke de zombie prosessen finnes etter den overordnede opphører?
I <apue2>,
Sitat:
Men hva skjer hvis den overordnede opphører før barnet? Svaret er
at init prosessen blir den overordnede prosessen med en prosess der
forelder opphører. Vi sier at prosessen har arvet etter init. Hva
vanligvis skjer er at når en prosess opphører, kjernen går
gjennom alle aktive prosesser for å se om avslutte prosessen er den
foreldre av en prosess som fortsatt eksisterer.
|
Min forståelse er denne: etter når foreldre opphører, hvis det er barn prosesser allerede avsluttet, og fortsatt kjører, init vil vedta de kjører seg, ikke allerede avslutta dei. (ikke den "aktive" og "fortsatt eksisterer i apue2 betyr dette?) Så en zombie barnet vil ikke bli vedtatt av init. I mitt tilfelle, av den tid den overordnede opphører, barnet ikke er "aktiv" og vil ikke bli vedtatt av init.
Dessuten barnet prosess i mitt program forsvinner umiddelbart etter foreldrenes opphører. Som jeg beskrev, det tror jeg ikke dette er gjort av init, deretter som gjorde?