linux多线程信号总结

博客介绍了多线程环境下信号使用的情况。同一进程的线程共享信号处理函数,由最后注册的线程决定。可给任意线程发信号,若线程屏蔽信号,会选其他未屏蔽线程处理,若都屏蔽则进程退出。还提及发送信号的命令及Ctl+C的作用,指出多线程用信号有诸多不确定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 同一个进程中的所有线程共享一份信号处理函数(注:一个信号对应于一个信号函数,没有则调用默认的),任何线程注册信号函数都会覆写之前的信号函数。所以最终进程中的信号函数是由最后一次注册信号函数的线程决定的。
  2. 可以给任何线程发送信号,收到信号的线程执行相应的信号函数。由于一个进程中所有的线程共用一份信号函数(当然,一个信号对应一个信号处理函数),即使对应于当前信号的信号处理函数不是当前线程注册的,也可以顺利调用信号处理函数
  3. 如果接受到信号的线程的对应信号被屏蔽,随机选用一个同一进程中的其他的没有屏蔽相应信号的线程执行信号处理函数。如果其他所有线程都屏蔽了此信号,信号将无法处理,整个进程直接退出
  4. 通过kill -2 + 线程号给特定的线程发送SIGINT信号,kill -9 + 线程号直接杀死对应线程所在进程中所有的线程
  5. Ctl+C是发送SIGINT信号给shell当先显示的线程,一般是主线程

综上:在多线程环境下使用信号会有诸多的不确定性,所以使用信号绝对不是一个好的方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值