【问题标题】:Slow system call and signals缓慢的系统调用和信号
【发布时间】:2015-09-08 21:11:53
【问题描述】:

我读过这个主题: Relationship slow system call with signal

对我来说一切都不清楚。特别是我不理解这部分答案,因为我没有看到包含的源代码有问题。 请解释一下。 提前致谢。

不管怎样,回到问题上来。如果你想知道为什么读取不 EINTR 失败,答案是 SA_RESTART。在大多数 Unix 系统上,一些 如果有信号,系统调用会自动重新启动。

【问题讨论】:

    标签: c linux-kernel


    【解决方案1】:

    OP 期望 read 调用返回错误代码,因为它被信号中断。在read系统调用的情况下,如果有信号,操作系统会自动重启这个系统调用,所以没有返回错误。

    【讨论】:

    • 但请注意,参考答案 有点偏离。 sigaction() 接受的SA_RESTART 标志与signal() 没有直接关系。 POSIX 指定当通过signal() 设置的信号处理程序返回(在相关情况下)“程序应在中断点恢复执行”。这与将SA_RESTART 标志指定为sigaction() 时所需的行为相似但不完全相同。然而,在实践中,我不知道实现是否真的以不同的方式对待这两者。
    猜你喜欢
    • 2011-09-07
    • 2015-12-18
    • 2014-09-10
    • 2017-05-07
    • 2013-05-24
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多