【发布时间】:2018-06-11 17:41:55
【问题描述】:
我正在阅读The Linux Programming Interface,它描述了(在第 21.5 节中)阻塞系统调用如何被信号中断。这似乎意味着不能中断非阻塞系统调用。这是真的吗?
【问题讨论】:
-
由于信号是异步的,SIGINT 可能会在任何系统调用之外中断您的程序。我想知道在调用非阻塞系统调用之后但在它返回之前是否可以中断程序。
-
我认为通常任何系统调用都可以被信号中断。 “非阻塞”仅意味着进行系统调用不会取消您的进程,但系统调用仍然必须运行,并且在此期间可能会有信号到达。
-
是的,这对我来说很有意义。也许这个例子专门提到阻塞系统调用只是因为它们更有可能被中断,但是这本书对它如何描述一切非常精确,所以我觉得它真的只针对阻塞系统调用,但我没有证据为此
-
我想你可以通过调用 alarm() 来安排信号,然后在紧密循环中调用一些非阻塞调用并检查信号处理程序中的堆栈内容并检查返回值来测试它来自系统调用
标签: c linux linux-kernel signals system-calls