我对信号处理程序的执行感到困惑。
假设我使用为SIGTERM注册的信号处理程序运行单个线程(主线程)。然后,当收到信号SIGTERM时,处理程序是在当前线程(主线程)中执行还是在与主线程分开的另一个分离线程中执行。
解答: 我读过一篇关于信号处理程序和重入函数的博客。 here is the address.
答案 0 :(得分:2)
在Linux上,信号处理程序在当前线程中执行(假设您指的是运行该线程的计划任务,因为内核调度程序仅调度任务)。
通常,当发送信号时,内核会自动为信号处理程序设置一些调用帧(新添加的帧以sigreturn
结束...)
另见sigaltstack(2)& sigreturn(2)
请注意,pthread_create(3)不是系统调用(请参阅syscalls(2) ...),内核不知道(因为pthread_create
正在调用clone(2))。阅读pthreads(7)和signal(7)