c - POSIX 名称信号量在进程退出后不释放

标签 c linux posix ipc semaphore

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

在进程(打开它的)结束或退出后,是否有办法让它关闭/释放?

最佳答案

早期的讨论在这里:How do I recover a semaphore when the process that decremented it to zero crashes? .他们在那里讨论了几种可能的解决方案。

简而言之:

  • 没有。如果所属进程崩溃或被信号杀死,则不会释放 POSIX 信号量。等待过程将不得不永远等待。只要您坚持使用信号量,就无法解决这个问题。
  • 可以使用套接字或文件锁来实现进程间同步,进程退出时自动释放。我上面贴的题主最终选择了文件锁。参见 his answer .在评论区,他发布了一个链接到他讨论这个问题的博客。

其他可能有帮助的链接:

关于c - POSIX 名称信号量在进程退出后不释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34756406/

相关文章:

c - 在循环过程中更改变量时出现问题

在 OSX 上编译 ptrace() 程序

c - 在 C 中执行 ASM call/ret

日期不正确时返回 NA

login - 叉 "free"sshd?

c - 为我的程序提供一点帮助 : infinite loop in the scanf

regex - 修剪长文件名的名称[重命名]

linux - 在 Ubuntu Linux 上使用 Apache 在本地测试您的网站

linux - 该系统上未安装 Pascal 编译器?

python - 查找锁定文件的进程的 PID