如何知道 vfork 函数中的父进程或子进程

Posted

技术标签:

【中文标题】如何知道 vfork 函数中的父进程或子进程【英文标题】:how to know parent or child process in vfork function 【发布时间】: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 值,那么这段代码是否有效? ,因为我已经看到示例按照上面的代码进行操作。

【问题讨论】:

阅读这里man7.org/linux/man-pages/man2/vfork.2.html 并阅读所有内容,很有趣。 OT:至少还是int main(void) 【参考方案1】:

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

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

【讨论】:

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

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

【讨论】:

【参考方案3】:

此代码有效吗?

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

【讨论】:

以上是关于如何知道 vfork 函数中的父进程或子进程的主要内容,如果未能解决你的问题,请参考以下文章

进程控制fork vfork

Linux中的进程 --- forkvforkexec函数族进程退出方式等分析

Linux学习-进程管理

Linux进程学习 - 孤儿进程和守护进程

(疑问)进程控制---vfork 函数

golang 热重启