sem_close vs sem_unlink当进程终止
问题描述:
我有多个进程使用信号进行通信。sem_close vs sem_unlink当进程终止
sem_open("\name",O_CREATE,S_IRWXU|S_IRWXG,10);
我有2个问题w.r.t如下:
现在,当一个进程突然死亡,没有调用sem_close或sem_unlink。剩下的流程会发生什么?
如果调用sem_close(),则不会为1进程调用sem_unlink()。所有其他进程调用sem_close()和sem_unlink()。所有进程退出后,信号量是否仍然存在?
答
在回答你的问题:
-
当一个进程死亡,自愿或不unvoluntarily
- ,则sem_close操作将会自动执行。
- 不,如果所有进程退出并且至少有一个进程调用了sem_unlink,则信号量不存在。
要扩展位: sem_unlink删除命名信号量,一旦它的引用计数为0,即所有的过程,打开了它呼吁sem_close或已退出后会破坏信号量。
参考文献:书 - Unix的网络规划进程间通信由W.Richard史蒂文斯,第2卷,CH10