通常,信号不会通过中断系统调用EINTR
。从历史上看,有两种可能的信号传递行为:BSD行为(当被信号中断时,系统调用将自动重新启动)和Unix系统V行为(当被信号中断时,系统调用将返回-1并errno
设置为EINTR
)。Linux(内核)采用了后者,但是GNU C库开发人员(正确地)认为BSD行为更为理智,在现代Linux系统上,调用signal
(这是一个库函数)会导致BSD行为。
POSIX允许任何一种行为,因此建议始终使用sigaction
可SA_RESTART
根据需要的行为选择设置或省略标志的位置。请参阅sigaction
此处的文档:
http://www.opengroup.org/onlinepubs/9699919799/functions/sigaction.html