首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pthread_kill异步信号在Linux上安全吗?

pthread_kill异步信号在Linux上安全吗?
EN

Stack Overflow用户
提问于 2018-07-23 18:33:17
回答 1查看 399关注 0票数 4

OpenGroup Unix规范索赔要求 pthread_kill()是异步信号安全的.但是Linux man 7信号并没有在相关部分列出这个函数。

那么,在Linux上的信号处理程序中调用pthread_kill安全吗?我知道它是用tgkill()实现的(这是安全的.但这并不能自动保证pthread_kill()的安全性)。

一些背景:

  • 使用O_ASYNC/F_SETOWN_EX/F_SETSIG将SIGRTMIN信号定向到I/O准备就绪的特定线程。
  • 不幸的是,当实时信号队列已满时,Linux将恢复到向整个进程提供SIGIO .
  • 为了纠正这个SIGIO处理程序,它将该信号转发回指定的线程(该线程阻止SIGIO并在信号处理循环中使用sigwaitinfo() )。

编辑:信号处理线程将接收到的SIGIO视为“我们有活动,但不知道在哪里--检查每个文件描述符”。不太理想,但总比完全错过信号好。

编辑2:必须对设计进行一点更新(出于某种无法理解的原因,我认为SIGIO是一个实时信号)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-24 18:23:52

在这里总结克雷格·埃斯蒂的答案(谢谢,伙计!):

在所有(最近的)手册页中,pthread_kill被列为异步信号安全。在glibc的来源中有一条评论声称在fork()的存在下它是不安全的,所以如果你感到偏执,你可以使用tgkill(getpid(), <thread-id>, <signal-id>)

所以,是的-- pthread_killtgkill都会没事的。

在我的CentOS 7中,man没有列出任何一个安全性,但这很可能是因为它太老了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51485203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档