在Linux中,当程序(可能具有多个线程)接收到诸如SIGTERM或SIGHUP之类的信号时会发生什么?
哪个线程拦截信号?多个线程可以得到相同的信号吗?有专门用于处理信号的特殊线程吗?如果不是,那么在处理信号的线程内部会发生什么?信号处理程序例程完成后,如何恢复执行?
根据您所使用的Linux内核版本,这会有些许细微差别。
假设有2.6个posix线程,并且如果您正在谈论操作系统正在发送SIGTERM或SIGHUP,则信号将发送到进程,由根线程接收并处理。使用POSIX线程,您也可以将SIGTERM发送到各个线程,但是我怀疑您是在询问操作系统将信号发送到进程时会发生什么。
在2.6中,SIGTERM将导致子线程“干净地”退出,在2.4中,子线程处于不确定状态。