gpt4 book ai didi

linux - 信号处理、中断处理问题

转载 作者:IT王子 更新时间:2023-10-29 00:35:23 26 4
gpt4 key购买 nike

当进程正在执行阻塞系统调用时,比如读或写,信号已经到达。系统调用是否因错误 EINTR 而终止?处理系统调用后是否重启系统调用?

假设系统调用因错误 EINTR 终止,内核在返回用户空间之前处理该信号。

信号句柄是在用户态还是内核态执行?如果它处于用户模式,是否会在信号到达期间的系统调用(读/写)之后返回到指令,或者在处理信号后再次进入内核模式并从 ret_from_syscall 返回给用户。如何在信号到达期间系统调用的下一条指令处恢复执行?

是否可以通过在 sigaction 中传递 SA_RESTART 标志来重启系统?

最佳答案

信号在用户模式下执行,但具有不同的用户上下文,然后返回到内核,内核通过 ret_from_syscall 返回到用户模式。使用 SA_RESTART 安装信号处理程序时系统调用的行为取决于系统调用。

最近版本的 signal overview manpage 中提供了关于重新启动哪些系统调用的描述。 :

man 7 signal

如果不使用 SA_RESTART 标志,则不会重新启动系统调用。

关于linux - 信号处理、中断处理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3633844/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com