信号掩码可以在每个线程的基础上设置,但信号处理是什么?如果我在pthread_create()
创建新线程之前调用sigaction()
,新线程是否会获得相同的信号处理程序?如果我在pthread_create()
之后使用sigaction()
,会改变整个进程信号处理程序还是仅改变线程的那些处理程序?在linux上使用带有POSIX线程的信号
回答
每个进程只有一个信号处理程序。所以线程在这里没有任何关联。信号处理程序在接收信号的线程环境中调用。如果多个线程没有阻止信号,那么哪个线程接收信号不被指定。
如果多个线程在系统调用中等待,您必须小心。你也必须注意使用计时器动作和呼叫进入睡眠状态。
您也可以找到这个答案有帮助:POSIX threads and signals
好的,谢谢你的回答。信号传递是异步还是延迟? 'pthread_cancel()'可以被tweeked,但是'pthread_kill()'呢?我读到的信号确实使用取消点,但即使系统调用它们也会中断。 – Kouros
'信号处理程序是在它自己的上下文中调用的,它不是线程的一个。' - 否根据[man signal(7)](http://man7.org/linux/man-pages/man7/signal .7.html):'一个流程控制的信号可能被传送到当前没有信号被阻塞的线程中的任何一个线程。'# – Tsyvarev
@Kouros几乎每个系统调用都会被信号中断。所以你必须检查返回值。如果处理了信号,通常会返回'EINTR'。 – Klaus
- 1. Posix线程通信Linux
- 2. POSIX线程和信号
- 3. 我Posix线程没有信号醒来
- 4. Linux中POSIX可靠信号与POSIX实时信号有什么区别?
- 5. Posix线程:发信号在while循环中运行的线程
- 6. POSIX线程和公平(信号量)
- 7. POSIX线程和信号掩码
- 8. POSIX多线程和信号配置
- 9. C,如何在分叉进程上使用POSIX信号量?
- 10. POSIX线程在ios上
- 11. 如何在每个进程使用带有一个线程的mod_wsgi的信号?
- 12. Linux:信号对多线程的影响
- 13. 如何在c上使用posix命名信号与linux上两个进程之间的共享内存?
- 14. 使用适当的POSIX信号
- 15. 使用posix无名信号量的IPC
- 16. 使用linux上的信号的IPC
- 17. 如何在多线程应用程序中用异步信号管理共享的POSIX信号量
- 18. 带有posix信号列表的手册页?
- 19. POSIX信号麻烦
- 20. POSIX信号行为
- 21. 的Linux/POSIX:为什么不调用fork()叉*所有*线程
- 22. 带信号量的多线程
- 23. 带信号的同步线程
- 24. 带线程的Qt信号插槽
- 25. 使用Posix信号检测请求
- 26. 使用sigaction学习POSIX信号
- 27. POSIX定时器和POSIX信号处理
- 28. Posix线程在C++
- 29. OSX和LINUX上POSIX线程之间的区别?
- 30. posix线程阻塞信号并解除阻塞
你看过[信号(7)](http://man7.org/linux/man-pages/man7/signal.7.html)? –