2025-02-25
panic()
是Linux内核中一个关键函数,用于在发生无法恢复的严重错误时终止系统运行,并打印错误信息。
系统终止:当内核检测到无法处理的严重错误(如内存损坏、硬件故障或关键数据结构异常)时,调用panic()
终止系统运行。
错误信息输出:打印错误消息、调用堆栈(通过dump_stack()
)和寄存器状态,帮助开发者诊断问题。
防止进一步损坏:避免系统在错误状态下继续运行,导致数据损坏或安全问题。
不可恢复:调用panic()
后,系统将停止运行(除非配置了kdump或KEXEC)。
调试用途:生产环境中应尽量避免触发panic()
,除非是严重错误。
替代方案:对于非致命错误,可使用WARN_ON()
或pr_err()
记录日志而不终止系统。
BUG_ON()
:在条件为真时触发panic()
WARN_ON()
:打印警告信息但不终止系统
oops
:内核异常处理机制,可能触发panic()
panic("Kernel panic - not syncing: Example error message")
后,输出如下:Kernel panic - not syncing: Example error message
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.15.0 #1
Call Trace:
[<ffffffff8100b0d8>] dump_stack+0x67/0x9a
[<ffffffff8100b1d5>] panic+0x101/0x2d3
[<ffffffff813e4567>] init_module+0x17/0x20
[<ffffffff81002068>] do_one_initcall+0x38/0x170
...