内核中如何处理信号

内核中如何处理信号

内核中如何处理信号。如果我向内核线程/进程发送终止信号,内部会发生什么。内核进程崩溃是否意味着内核总是出现恐慌,如果不是,它会生成 coredump。

答案1

当线程在内核模式下运行代码时,信号会排队,即内核会记住信号已发送,但不会对其进行操作。当内核线程等待事件时,等待可能会被信号中断——这取决于内核代码的作者。例如,Linux 内核 API 有成对的函数,例如wait_eventwait_event_interruptible;只有“可中断”函数会在线程收到信号时立即返回。

内核代码不会被信号中断,原因是它可以使内核内存或硬件设备处于不一致的状态。因此,代码总是有机会进行清理。

Linux的内核线程(即线程内核(在进程列表中没有列出相应的可执行文件)根本无法接收信号。更准确地说,传递到内核线程的任何信号都将被忽略。

内核代码崩溃可能会也可能不会导致恐慌,具体取决于代码的哪一部分导致了崩溃。例如,Linux 尝试从驱动程序代码的崩溃中恢复,但这是否可能取决于出了什么问题。内核代码崩溃可能会也可能不会生成转储,具体取决于内核和系统配置;例如Linux有一个内核崩溃转储机制。

相关内容