为什么这个程序永远不会返回并继续创建子进程?vfork永不返回
int main()
{
pid_t pid;
int foo1 = 1, foo2 = 2;
printf("before fork()\n");
if ((pid = vfork()) < 0) {
printf("fork failed.\n");
}else if (pid == 0) {
foo1++;
foo2++;
printf("child process: pid is %d, my parent pid is %d\n", getpid(), getppid());
}else if (pid > 0){
printf("parent process: pid is %d\n", getpid());
}
printf("%s: foo1 is %d, foo2 is %d\n",pid == 0 ? "child process" : "parent process", foo1, foo2);
return 0;
}
输出是这样的:
before fork()
child process: pid is 17244, my parent pid is 15839
child process: foo1 is 2, foo2 is 3
parent process: pid is 15839
parent process: foo1 is -1079005816, foo2 is -1218256081
before fork()
child process: pid is 17245, my parent pid is 15839
child process: foo1 is 2, foo2 is 3
parent process: pid is 15839
parent process: foo1 is -1079005816, foo2 is -1218256081
before fork()
.....
.....
如果在第二如果块添加一个_exit然后it'ok。 我知道vfork与父进程共享相同的地址空间,但如果progrem以崩溃而不是无限循环结束,则更合理。
谢谢。将“return 0”替换为“exit(0)”后,程序按预期运行。我认为“回归”是无限循环的原因。 – deepsky
是的,你正在用'return'破坏父级堆栈。 –
@deepsky:不要调用'exit()',或者调用'_exit()' – JeremyP