gpt4 book ai didi

Linux 信号和中断处理程序

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:47 25 4
gpt4 key购买 nike

阅读 linux 中的中断,我了解到它们的处理程序将运行直到完成(这里不考虑下半部分)。因此,假设我的代码已使用 while(1) 注册了 SIGINT 处理程序(使用 signal()/sigaction() 调用)-在其中循环(即处理程序永远不会返回)。

如果我在运行时突然退出我的程序,那么这种情况不应该完全卡住我的机器吗?我只有一个 CPU 核心的机器不会进入无限循环吗?

我的意思是;因为我的中断处理程序没有返回,CPU 不会只执行 while(1) 代码吗? (即没有其他进程有机会运行,因为在处理程序中不会有任何上下文切换/抢占,或者中断处理程序可以在运行 while(1) 循环之间被抢占吗?)

最佳答案

尽管信号处理程序和中断处理程序具有相似的处理方式,但您一定要混合使用它们。与编写内核代码不同,您不会直接遇到中断处理程序。

但是,信号处理程序的游戏规则非常相似。您应该退出信号处理程序或完成程序(并且,后者是用于停止整个系统的模拟,用于内核区域)。这包括将信号处理程序作为 longjmp() 退出的奇特方式。

从内核 POV 来看,中断处理程序中的永远循环中的进程与 main() 等普通代码段中具有相同循环的进程没有区别。输入信号处理程序会修改信号掩码,但不会从根本上改变事情。这样的进程可以像信号外一样被停止、跟踪、杀死。

(所有这些都不涉及一些具有高级凭证的特殊进程类。例如,X Window 服务器可能很特殊,因为它在处理视频适配器期间禁用了一些内核事件。但是您可能应该知道编写此类软件时所需的安全规则.)

关于Linux 信号和中断处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20719014/

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