本文介绍了在的vfork()系统调用的返回值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

考虑下面的code:

  INT的main()
{
  INT PID;
  PID =的vfork();
  如果(PID == 0)
     的printf(子\\ n);
  其他
     的printf(父\\ n);
  返回0;
  }

在的情况下,的vfork()按父进程和子进程使用的ADRESS空间是一样的,可变的pid这样单拷贝应该在那里。现在我无法理解该PID变量如何通过有返回两个值的的vfork()即零的儿童及非零父?

在的情况下的叉()的ADRESS空间也将被复制,并有在每个孩子和家长的PID可变两个副本,所以我可以理解在这种情况下,两个不同的副本可以有不同的值通过返回的叉()但在的vfork()如何PID必须通过返回两个值的的vfork()

解决方案

有没有2份。当你CAL 的vfork 父冻结,而孩子做它的事(直到它调用 _exit(2)的execve(2))。因此,在任何一个时刻,只能有一个单一的 PID 变量。

作为一个方面说明,你在做什么是不安全的。 明确阐述它的标准是:

As a second side note, vfork has been removed from SUSv4 - there's really no point in using it.

这篇关于在的vfork()系统调用的返回值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-08 20:27