微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Linux中如何处理asynchronous信号?

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

为什么Linux不接受()返回EINTR?

为什么在Linux信号处理中遇到意外的行为?

如何拦截linux信号? (在C)

黑客terminal消息

在SIGILL处理程序中,如何跳过违规指令?

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

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

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

从信号手册页 :

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐