您当前位置: 首页 » [linux总结] » unix编程环境学习 » linux进程信号处理

linux进程信号处理

2020-06-16 |

最近在查coredump的时候,一直发现堆栈不完整。于是很好奇abort的信号默认情况下会如何处理。

网上查了一下,发现信号分为进程间信号多线程间信号

进程间信号,即进程之间可以互发信号,也可以进程内部某个线程来产生信号。由系统库提供支持。

多线程间信号,即线程之间互发信号,且指定具体线程来接收并处理。由pthread库提供支持。

由于coredump的抓取过程,应该没有做过特殊处理,因此使用的就是进程间信号。那么进程内,当某个线程执行某个代码时,产生了abort信号,信号会由谁来负责处理?实际测试的结果是由具体产生abort信号的线程来处理执行。

查了一下网上的解释,信号的处理,是由内核态准备切换回用户态时来处理,由于在态切换时,主动地插入了一个函数跳转指令,进而转为执行信号处理函数。因此由产生abort信号的线程来处理实现即简单,也符合逻辑。

由于是中断处理,这一点上可以看做和windows类似。