[英]return value in vfork() system call
考虑以下代码:
int main()
{
int pid;
pid=vfork();
if(pid==0)
printf("child\n");
else
printf("parent\n");
return 0;
}
在vfork()的情况下,父进程和子进程使用的地址空间是相同的,因此应该存在变量pid的单个副本。 现在我无法理解这个pid变量如何具有vfork()返回的两个值,即,对于子项为零而对于父项为非零?
在fork()的情况下,地址空间也被复制,每个子节点和父节点中都有两个pid变量副本,所以我可以理解在这种情况下,两个不同的副本可以有fork()返回的不同值,但是无法理解在vfork()的情况下,pid如何具有vfork()返回的两个值?
没有2份。 当你调用vfork
,父进程会在子进行事务时冻结(直到它调用_exit(2)
或execve(2)
)。 所以在任何一个时刻,只有一个pid
变量。
作为旁注,你正在做的是不安全的。 标准清楚地说明了这一点:
vfork()函数应该等效于fork(),除非如果vfork()创建的进程修改除了用于存储vfork()的返回值的pid_t类型的变量之外的任何数据,则该行为是未定义的 ,或者从调用vfork()的函数返回,或在成功调用_exit()或exec 函数系列之前调用任何其他函数。
作为第二个注释, vfork
已从SUSv4
删除 - 使用它确实没有意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.