一尘不染

Linux中具有多个线程的信号处理

linux

在Linux中,当程序(可能具有多个线程)接收到诸如SIGTERM或SIGHUP之类的信号时会发生什么?

哪个线程拦截信号?多个线程可以得到相同的信号吗?有专门用于处理信号的特殊线程吗?如果不是,那么在处理信号的线程内部会发生什么?信号处理程序例程完成后,如何恢复执行?


阅读 449

收藏
2020-06-02

共1个答案

一尘不染

根据您所使用的Linux内核版本,这会有些许细微差别。

假设有2.6个posix线程,并且如果您正在谈论操作系统正在发送SIGTERM或SIGHUP,则信号将发送到进程,由根线程接收并处理。使用POSIX线程,您也可以将SIGTERM发送到各个线程,但是我怀疑您是在询问操​​作系统将信号发送到进程时会发生什么。

在2.6中,SIGTERM将导致子线程“干净地”退出,在2.4中,子线程处于不确定状态。

2020-06-02