我有理解这个代码的行为问题:不规则导致僵尸例如
#include <stdio.h>
#include <stdlib.h>
int main() {
int nr;
nr = fork();
if (nr == 0) {
/* Child process */
printf("Child process, fork return value %d\n", nr);
exit(0);
} else {
/* Parent process */
printf("Parent process, fork return value: %d\n", nr);
exit(0);
}
}
在Unix shell中运行。当我得到这样的结果:
Parent process, fork return value: 343
Child process, fork return value: 0
但有时它只是给了我这个结果没有任何shell提示符:
Child process, fork return value: 0
我知道它可以用父进程中的wait()函数来解决。但我想知道:
为什么结果不规则?有人能解释发生了什么吗?子进程成为僵尸,但为什么父母不处理printf()函数调用运行?
我想这对Linux和永远无法看到你的描述。相反,我总是得到两个消息。我甚至试图给父亲和/或孩子安排睡眠,但除了预期的延误之外,没有任何改变。从理论上讲,我也找不到你的观察结果。你介意告诉我们你的系统发生了什么? – Alfe
父进程也应该打印该消息。僵尸进程是当父进程在父进程“等待”之前完成执行的时候。 printf在它变成'僵尸进程'之前执行。父母应该打印它的消息,不管子进程是什么......在叉子共享相同的'stdout'之后,他们是独立的进程,因为你没有重定向。 –