oops和panic的区别

本文转载自Linux公众号

宋宝华: Kernel Oops和Panic是一回事吗?

Oops英文单词的中文含义是“哎呀”,表示“惊叹”;Panic英文单词的中文含义是“惊慌”。所以panic的程度显然是高于oops的,因为惊叹不一定会惊慌,而惊慌最容易失措,内核panic后,就死机了,俗称内核崩溃。但是内核报oops,这个时候不见得会panic,它可能只是报个oops,杀死进程而已。


当oops发生的时候,如果in_interrupt()成立,或者panic_on_oops成立,都是直接panic(),否则只是以一个信号退出进程而已。

由此可见,如果我们在一个中断上下文,这个oops必须抛panic;否则如果只是一个进程上下文,打印个oops,进程退出即可。另外,如果/proc/sys/kernel/panic_on_oops设置的值是1,这个时候,不管你在什么上下文,都是要panic的。

In_interrupt()在如下三种情况下,都会成立:

  • 在硬中断;

  • 在软中断(soft irq);

  • 在NMI

全文总结非中断上下文的oops只是oops;中断上下文oops要panic;如果设置了panic_on_oops,任何oops都是panic。


猜你喜欢

转载自blog.csdn.net/woyimibayi/article/details/79353475