本文转载自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