如何在Linux中处理异步信号?

Jas*_*ker 7 unix linux signals

这似乎是一个愚蠢的问题,但我看不到任何地方的答案.我知道在UNIX中,信号是异步处理的.如果我编写一个处理信号的函数,该函数在哪里运行?产生了一个新的线程?现有的线程是否以某种方式中断?或者这是在异步I/O这样的系统线程中处理的?

Ric*_*ton 6

执行信号功能,就好像进程中的线程已被中断一样.也就是说,使用信号线程调用信号处理程序并重新排列堆栈,以便在信号处理程序返回时线程继续执行.没有引入新线程.


Ton*_*roy 2

现有的进程线程将被中断,直到函数返回。它可以安全执行的操作有严格的限制,以确保它不会破坏线程正在执行的函数调用的状态 - 具体来说,它调用的线程可能已经调用的任何函数都必须是异步可重入的。请参阅手册页,例如 signal、sigaction 以获取更多详细信息,或者根据需要提出更具体的问题。