Ответ 1
Цитирование:
Насколько я понимаю, процесс зомби происходит, когда родительский процесс выходит из процесса перед дочерними процессами.
Это неправильно. Согласно man 2 wait
(см. ПРИМЕЧАНИЯ):
Ребенок, который заканчивается, но не ожидал, станет "зомби".
Итак, если вы хотите создать зомби-процесс, после fork(2)
дочерний процесс должен exit()
, а родительский процесс должен sleep()
перед выходом, давая вам время, чтобы наблюдать вывод ps(1)
.
Например, вы можете использовать приведенный ниже код вместо своих и использовать ps(1)
, а sleep()
ing:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(void)
{
pid_t pid;
int status;
if ((pid = fork()) < 0) {
perror("fork");
exit(1);
}
/* Child */
if (pid == 0)
exit(0);
/* Parent
* Gives you time to observe the zombie using ps(1) ... */
sleep(100);
/* ... and after that, parent wait(2)s its child's
* exit status, and prints a relevant message. */
pid = wait(&status);
if (WIFEXITED(status))
fprintf(stderr, "\n\t[%d]\tProcess %d exited with status %d.\n",
(int) getpid(), pid, WEXITSTATUS(status));
return 0;
}