#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 变量只有一个副本,这怎么可能。