下面的代码永远不会结束。这是为什么?
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#define SIZE 5
int nums[SIZE] = {0, 1, 2, 3, 4};
int main()
{
int i;
pid_t pid;
pid = vfork();
if(pid == 0){ /* Child process */
for(i = 0; i < SIZE; i++){
nums[i] *= -i;
printf(”CHILD: %d “, nums[i]); /* LINE X */
}
}
else if (pid > 0){ /* Parent process */
wait(NULL);
for(i = 0; i < SIZE; i++)
printf(”PARENT: %d “, nums[i]); /* LINE Y */
}
return 0;
}
更新:
这段代码只是为了说明我对vfork()
. 似乎当我使用时vfork()
,子进程不会复制父进程的地址空间。相反,它共享地址空间。在这种情况下,我希望两个进程都更新 nums 数组,我的问题是按什么顺序?操作系统如何在两者之间同步?
至于为什么代码永远不会结束,可能是因为我没有明确的退出_exit()
或声明。exec()
我对吗?
UPDATE2:
我刚读到:56. fork() 和 vfork() 系统调用之间的区别?
我认为这篇文章可以帮助我解决我的第一个困惑。
来自 vfork() 系统调用的子进程在父进程的地址空间中执行(这可以覆盖父进程的数据和堆栈),这会挂起父进程直到子进程退出。