【问题标题】:How to use vfork to create multiple process?如何使用 vfork 创建多个进程?
【发布时间】:2014-01-31 11:11:41
【问题描述】:

这是 vfork() 的程序。该程序创建多个父子进程并在最后返回-1(意味着操作系统无法创建另一个进程)。为什么会发生这种行为?

#include<stdio.h>
void main()
{
  int pid;
  pid=vfork();
  printf("pid=%d\n",pid);
  if(pid==0)
  {
    printf("hello\n");
  }
}

【问题讨论】:

  • 不要使用 obsolete vfork 系统调用;始终使用fork(2),这非常有效!失败时使用perror

标签: linux operating-system fork vfork


【解决方案1】:

(1) 这会创建一个孩子。

(2) 对于vfork,子级与父级共享内存,直到调用exec_exit。你都不叫。

(3) 父级的执行被暂停,直到子级调用exec_exit

所以基本上你的例子是FUBAR。 vfork(如果现在真的有的话)的重点是提供一种快速的fork 机制,该机制将立即exec 另一个程序。常规 fork 的写时复制行为大大减少了对此的需求。

【讨论】:

  • 如果父执行被暂停,那么为什么它会进入“if(pid>0)”条件。它不应该执行这个条件。
  • 不是。在我的系统上发生以下情况。 (1)子打印pid=0; (2) 孩子打印“你好”; (3) child crash at_exit(); (4) parent 恢复并打印其 pid。
  • 那么为什么父母要创建另一个孩子并进入循环?
  • 因为您必须运行其他程序而不是这个程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-20
  • 2016-10-23
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 2021-06-11
相关资源
最近更新 更多