鉴于此C程序:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void) {
pid_t pid;
if ((pid = fork()) >= 0) {
if (pid == 0) {
exit(0);
} else {
sleep(999);
}
}
return 0;
}
跑完后:
$ gcc -o zombie zombie.c
$ ./zombie &
$ ps -f
仅显示父进程:
501 77474 74651 0 2:36PM ttys000 0:00.00 ./zombie
在Linux上,同一个程序显示了这个:
osboxes 6900 6835 0 13:37 pts/1 00:00:00 ./zombie
osboxes 6903 6900 0 13:37 pts/1 00:00:00 [zombie] <defunct>
现在,奇怪的是,在OSX上启动多个zombie
程序时..
$ ./zombie &
$ ./zombie &
$ ps -f
..僵尸进程(括号内)显示:
501 77653 74651 0 2:39PM ttys000 0:00.00 ./zombie
501 77664 74651 0 2:39PM ttys000 0:00.00 ./zombie
501 77667 77664 0 2:39PM ttys000 0:00.00 (zombie)
原因是什么?