如何知道 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 函数中的父进程或子进程的主要内容,如果未能解决你的问题,请参考以下文章