繁体   English   中英

vfork()系统调用中的返回值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM