信号处理程序在哪里执行?

时间:2015-01-15 14:34:09

标签: linux signals

我对信号处理程序的执行感到困惑。

假设我使用为SIGTERM注册的信号处理程序运行单个线程(主线程)。然后,当收到信号SIGTERM时,处理程序是在当前线程(主线程)中执行还是在与主线程分开的另一个分离线程中执行。

解答: 我读过一篇关于信号处理程序和重入函数的博客。 here is the address.

1 个答案:

答案 0 :(得分:2)

在Linux上,信号处理程序在当前线程中执行(假设您指的是运行该线程的计划任务,因为内核调度程序仅调度任务)。

通常,当发送信号时,内核会自动为信号处理程序设置一些调用帧(新添加的帧以sigreturn结束...)

另见sigaltstack(2)& sigreturn(2)

请注意,pthread_create(3)不是系统调用(请参阅syscalls(2) ...),内核不知道(因为pthread_create正在调用clone(2))。阅读pthreads(7)signal(7)

BTW,各种POSIX系统(Linux,MacOSX,Solaris,......)的细节可能有所不同