Linux 信号量,跨分叉>exec'd 进程共享?

Linux semaphores, shared across forked->exec'd processes?

本文关键字:进程 共享 exec gt 信号量 分叉 Linux      更新时间:2023-10-16

假设我有一个派生子节点的父节点。然后,分叉的子进程使用exec()来更改它的进程映像。子节点和父节点现在都在使用管道进行活动数据交换。我想用一个信号量来同步这个数据交换。据我所知,我将在fork之前在父进程中创建信号量。然而,exec()之后的子进程是否能够访问这个信号量?如果没有,是否有其他方法可以使用信号量来建立同步?

从exec手册页:
[SEM] Any named semaphores open in the calling process shall be closed as if by appropriate calls to sem_close().
所以在调用exec之后,你无法到达父进程中的任何打开的信号量。


当然,你完全不用担心这个问题,如果你想让两个进程共享一个信号量,只要使用posix命名的信号量就可以了。

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