【发布时间】:2016-04-17 19:41:18
【问题描述】:
我正在尝试使用 POSIX 命名信号量进行跨进程同步。我注意到在进程死亡或退出后,信号量仍然被系统打开。
在进程(打开它)死亡或退出后,是否有办法让它关闭/释放?
【问题讨论】:
-
请向我们展示一个重现您的问题的示例。到目前为止,很难说到底是什么导致了这个问题。
-
sem_overview man page 说:“POSIX 命名信号量具有内核持久性:如果不被 sem_unlink(3) 删除,信号量将一直存在,直到系统关闭”。如果这没有帮助,请澄清您的问题。
-
我从 POSIX 文档中了解到,当进程崩溃或退出时,默认情况下它不会取消链接信号量。我只是想知道是否有任何选择或解决方法可以做到这一点。
-
@S.X “我只是想知道是否有任何选项或解决方法可以做到这一点。” - 绝对不在 POSIX 中。有些 *nix 系统有扩展来支持这种行为,有些则没有。所有可移植的“解决方案”都围绕着:定期检查(例如来自 cron 的脚本)应用程序是否正在运行,如果没有,则清理 SysV 资源。
标签: c linux posix ipc semaphore