【发布时间】:2012-08-29 14:22:34
【问题描述】:
#include<stdio.h>
#include<sys/types.h>
int main()
{
pid_t pid;
if((pid=vfork())<0)
{
perror("FORK ERROR");
exit(1);
}
if(pid==0)
{
printf("[CHILD] child id : %d\n" , pid);
_exit(1);
}
else
{
printf("[PARENT] process id : %d\n" , pid);
exit(1);
}
}
以上程序使用 vfork 创建进程。 因此,地址空间在父子之间共享。 这意味着 pid 变量只有一个副本。 但是当我在子进程中打印 pid 变量时,它会给出 0。父进程中的相同 pid 变量会给出子进程的进程 ID。 如果 pid 变量只有一个副本,这怎么可能。
【问题讨论】:
-
只有一个 pid 副本存在。在孩子和父母中打印pid的地址是相同的。同样根据 vfork 文档,父子节点共享相同的地址空间。
-
我已经删除了我的答案;重复的问题解释得更好。
标签: c linux-kernel fork system-calls