当线程在内核模式下运行代码时,信号会排队,即内核会记住信号已发送,但不会对其进行操作。当内核线程正在等待事件时,等待可能会被信号 \xe2\x80\x94\xc2\xa0it\ 中断,这取决于内核代码的作者。例如,Linux 内核 API 有成对的函数,如wait_event和wait_event_interruptible;如果线程收到信号,只有 \xe2\x80\x9cinterruptible\xe2\x80\x9d 函数会立即返回。
内核代码不被信号中断的原因是它可以使内核内存或硬件设备处于不一致的状态。因此,代码总是有机会进行清理。
\n\nLinux 的内核线程(即内核线程,在进程列表中没有列出相应的可执行文件)根本无法接收信号。更准确地说,传递到内核线程的任何信号都将被忽略。
\n\n内核代码崩溃可能会也可能不会导致恐慌,具体取决于代码的哪一部分导致了崩溃。例如,Linux 尝试从驱动程序代码的崩溃中恢复,但这是否可能取决于出了什么问题。内核代码崩溃可能会也可能不会生成转储,具体取决于内核和系统配置;例如Linux有一个内核崩溃转储机制。
\n| 归档时间: |
|
| 查看次数: |
4368 次 |
| 最近记录: |