【发布时间】:2013-04-01 17:13:47
【问题描述】:
假设我有一个分叉孩子的父母。分叉的孩子然后使用 exec() 来更改它的进程映像。孩子和父母现在都在使用管道进行主动数据交换。我想使用信号量同步这个数据交换。据我了解,我将在分叉之前在父级中创建信号量。但是,在 exec() 之后,孩子可以访问这个信号量吗? 如果没有,是否有其他方法可以使用信号量来建立同步?
【问题讨论】:
标签: c++ linux synchronization ipc semaphore
假设我有一个分叉孩子的父母。分叉的孩子然后使用 exec() 来更改它的进程映像。孩子和父母现在都在使用管道进行主动数据交换。我想使用信号量同步这个数据交换。据我了解,我将在分叉之前在父级中创建信号量。但是,在 exec() 之后,孩子可以访问这个信号量吗? 如果没有,是否有其他方法可以使用信号量来建立同步?
【问题讨论】:
标签: c++ linux synchronization ipc semaphore
来自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。
这个想法很简单,你在一个进程中创建一个信号量并给它一个名字;其他进程只需要有名称,然后它就可以打开该信号量。
【讨论】: