假设我有一个养孩子的父母。然后,分叉子进程使用exec()更改其进程映像。子级和父级现在都在使用管道进行活动数据交换。我想用信号量同步这个数据交换。根据我的理解,我将在fork之前在父进程中创建信号量。但是,在exec()之后,子进程是否能够访问这个信号量?
如果没有,是否有其他方法可以使用信号量来建立同步?
最佳答案
从exec man page开始:[SEM] Any named semaphores open in the calling process shall be closed as if by appropriate calls to sem_close().
所以在给exec打电话之后,你就无法联系到家长中任何一个公开的semephores。
当然,您完全不必担心这个问题,如果您希望两个进程共享一个信号量,只需使用posix named semaphores。
这个想法很简单,在一个进程中创建一个信号量并给它一个名称;另一个进程只需要有这个名称,然后它就可以打开这个信号量。