sem_close vs sem_unlink当进程终止

问题描述:

我有多个进程使用信号进行通信。sem_close vs sem_unlink当进程终止

sem_open("\name",O_CREATE,S_IRWXU|S_IRWXG,10); 

我有2个问题w.r.t如下:

  1. 现在,当一个进程突然死亡,没有调用sem_close或sem_unlink。剩下的流程会发生什么?

  2. 如果调用sem_close(),则不会为1进程调用sem_unlink()。所有其他进程调用sem_close()和sem_unlink()。所有进程退出后,信号量是否仍然存在?

在回答你的问题:

    当一个进程死亡,自愿或不unvoluntarily
  1. ,则sem_close操作将会自动执行。
  2. 不,如果所有进程退出并且至少有一个进程调用了sem_unlink,则信号量不存在。

要扩展位: sem_unlink删除命名信号量,一旦它的引用计数为0,即所有的过程,打开了它呼吁sem_close或已退出后会破坏信号量。

参考文献:书 - Unix的网络规划进程间通信由W.Richard史蒂文斯,第2卷,CH10