进程退出后 POSIX 名称信号量不会释放

2024-05-21

我正在尝试使用 POSIX 命名信号量进行跨进程同步。我注意到进程死亡或退出后,信号量仍然被系统打开。

在进程(打开它)死亡或退出后是否有办法使其关闭/释放?


早期的讨论在这里:当将信号量递减至零的进程崩溃时,如何恢复信号量? https://stackoverflow.com/questions/2053679/how-do-i-recover-a-semaphore-when-the-process-that-decremented-it-to-zero-crashe。他们在那里讨论了几种可能的解决方案。

简而言之:

  • 不会。如果所属进程崩溃或被信号杀死,POSIX 信号量不会被释放。等待的过程将不得不永远等待。只要坚持使用信号量,就无法解决这个问题。
  • 可以使用套接字或文件锁来实现进程间同步,当进程退出时可以自动释放。我上面发布的问题所有者最终选择了文件锁。看他的回答 https://stackoverflow.com/a/2058642/630364。在评论区,他发布了一个讨论这个问题的博客链接。

其他可能有帮助的链接:

  • 为什么当我的程序崩溃时 sem_wait() 没有撤消? https://groups.google.com/forum/#!topic/comp.os.linux.development.apps/Me_iB95sP1c:还建议使用文件锁。
  • 是否可以在 Linux/UNIX 上的多处理情况下使用互斥锁? https://stackoverflow.com/questions/9389730/is-it-possible-to-use-mutex-in-multiprocessing-case-on-linux-unix:他们讨论了通过在进程之间共享内存来使用互斥体来实现同步。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进程退出后 POSIX 名称信号量不会释放 的相关文章