问题描述
我正在学习fork(),然后尝试做一个小程序,在父母之前打印孩子。可以,但是父母打印了2次,我不明白为什么。
预期输出:
4 5 6
1 2 3
实际输出:
4 5 6
1 2 3
1 2 3
这是我的代码:
int main (int argc,char** argv) {
int childPid = fork();
if (childPid == 0){
printf("4 5 6\n");
}
wait(NULL);
printf("1 2 3\n");
exit(0);
}
解决方法
printf("1 2 3\n");
行将由父级和子级执行。子项将面对 wait(NULL);
行,但由于没有子项,因此将跳过它,并显示“ 1 2 3”,然后退出。同时,父母将收到孩子的终止状态,并通过打印“ 1 2 3”并退出来继续执行。为了使其正常工作,请对其进行相应的编辑:
int main (int argc,char** argv) {
int childPid = fork();
if (childPid == 0){
printf("4 5 6\n");
exit(0);
}
wait(NULL);
printf("1 2 3\n");
exit(0);
}