【问题标题】:how to know parent or child process in vfork function如何知道 vfork 函数中的父进程或子进程
【发布时间】:2014-03-19 17:28:22
【问题描述】:

我想知道我们是否使用 vfork,我们如何知道子进程或父进程,因为资源是共享的。 更具体地说,假设以下代码:

int main()
{
    int pid = vfork();
    if(pid == 0)
    {
       // code for child
     }
    else 
    {
       // code for parent
    }
    return 0;

}

在上面的代码中,如果资源是共享的,那么 pid 变量将具有 uniqe 值,那么这段代码是否有效? ,因为我已经看到示例按照上面的代码进行操作。

【问题讨论】:

标签: c fork ipc vfork


【解决方案1】:

vfork() 暂停父进程,直到子进程调用 exec*()_exit()

在这种格式中使用vfork(),因为我们使用fork() 会导致程序在无限循环中运行。它没有结束。
阅读此discussion 以更好地了解如何使用vfork()

【讨论】:

  • "在这种格式中使用 vfork(),因为我们使用 fork() 会导致程序无限循环运行。"请详细说明。
  • @alk 我提供的链接是关于 vfork() 永无止境执行的讨论。我运行它,我们应该在子进程部分使用 exec* 并在父进程中退出以停止无限循环。
【解决方案2】:

在 vfork 中,父级将等待子级完成,因此无需区分。

【讨论】:

    【解决方案3】:

    此代码有效吗?

    是的。 vfork() 仍然会复制父进程(概念上),和正常的fork() 一样,在子进程中它将返回 0,在父进程中该子进程的 pid。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多