Linux信号量,在forked->exec'd进程之间共享?

Posted

技术标签:

【中文标题】Linux信号量,在forked->exec\'d进程之间共享?【英文标题】:Linux semaphores, shared across forked->exec'd processes?Linux信号量,在forked->exec'd进程之间共享? 【发布时间】:2013-04-01 17:13:47 【问题描述】:

假设我有一个分叉孩子的父母。分叉的孩子然后使用 exec() 来更改它的进程映像。孩子和父母现在都在使用管道进行主动数据交换。我想使用信号量同步这个数据交换。据我了解,我将在分叉之前在父级中创建信号量。但是,在 exec() 之后,孩子可以访问这个信号量吗? 如果没有,是否有其他方法可以使用信号量来建立同步?

【问题讨论】:

【参考方案1】:

来自exec man page:[SEM] Any named semaphores open in the calling process shall be closed as if by appropriate calls to sem_close(). 因此,在调用 exec 之后,您无法访问父级中的任何打开的信号量。

当然,您完全不必担心这一点,如果您希望两个进程共享一个信号量,只需使用 posix named semaphores。

这个想法很简单,你在一个进程中创建一个信号量并给它一个名字;其他进程只需要有名称,然后它就可以打开该信号量。

【讨论】:

以上是关于Linux信号量,在forked->exec'd进程之间共享?的主要内容,如果未能解决你的问题,请参考以下文章

如果子发出信号,Perl 从 fork/exec 中检测到错误的退出代码

管道似乎无法在 exec() 覆盖的 fork() 进程之间进行通信

二十Linux 进程与信号---system 函数 和进程状态切换

linux中fork,source和exec的区别

linux中fork,source和exec的区别

Linux C fork exec介绍用法