在Linux中如何处理asynchronous信号?

这似乎是一个愚蠢的问题,但我无法在任何地方find答案。 我知道在UNIX中,信号是asynchronous处理的。 如果我写一个处理信号的函数,函数在哪里运行? 是一个新的线程产生? 某个现有的线程是否中断? 或者,这是在一个像asynchronousI / O系统线程处理?

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

现有的进程线程中断,直到函数返回。 对于确保它不会破坏线程处于中间位置的函数调用的状态有严格的限制 – 具体地说,它调用的线程可能已经调用的任何函数都必须是异步可重入的。 查看man页面,例如信号,sigaction获取更多详细信息,或者根据需要提出更具体的问题。

这不是一个单独的线程,但你的代码是匆忙暂停。 这就是为什么只有有限的POSIX调用子集可用。

从信号手册页 :

例程处理程序必须非常小心,因为其他地方的处理在某个任意点被中断。 POSIX有“安全功能”的概念。 如果一个信号中断一个不安全的函数,并且处理程序调用一个不安全的函数,那么这个行为是不确定的。 安全功能在各种标准中明确列出。