Hej
Jeg forsøgte at oprette en Zombie proces 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" tilstand med ps kommando, men dette Zombie-processen (barnet processen) eksisterer kun i den periode fra sin opsigelse til sit moderselskab opsigelse. Jeg kan ikke vente () barnet i moderselskabet, så hvorfor ikke den Zombie proces eksisterer efter moderselskabets udtraeder?
I <apue2>,
Citat:
Men hvad sker der, hvis den forælder opsiger før barnet? Svaret er
at init proces bliver moderselskabet proces af enhver proces, hvis
moderselskabet udtræder. Vi siger, at processen er blevet arvet fra init. Hvad
normalt sker, er, at når en proces opsiger kernen går
gennem alle aktive processer for at se, om afslutning af processen er den
moderselskab for enhver proces, der stadig eksisterer.
|
Min forståelse er, at på det tidspunkt, hvor moderselskabet udtraeder, hvis der er barn processer allerede opsagt og stadig kører, init vil vedtage kører dem, ikke allerede opsagt dem. (ikke den "aktive" og "stadig eksisterer" i apue2 betyder dette?) Så en Zombie barn processen ikke vil blive vedtaget af init. I mit tilfælde, med den tid, moderselskabet opsiger barnet ikke "aktive" og vil ikke blive vedtaget af init.
Desuden har barnet i mit program forsvinder umiddelbart efter moderselskabets udtræder. Som jeg beskrev, jeg tror ikke, dette gøres ved at init, så der gjorde?