2012-03-02 139 views
1

我有多個進程使用信號進行通信。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()。所有進程退出後,信號量是否仍然存在?

回答

1

在回答你的問題:

    當一個進程死亡,自願或不unvoluntarily
  1. ,則sem_close操作將會自動執行。
  2. 不,如果所有進程退出並且至少有一個進程調用了sem_unlink,則信號量不存在。

要擴展位: sem_unlink刪除命名信號量,一旦它的引用計數爲0,即所有的過程,打開了它呼籲sem_close或已退出後會破壞信號量。

參考文獻:書 - Unix的網絡規劃進程間通信由W.Richard史蒂文斯,第2卷,CH10