【发布时间】:2012-11-12 14:02:00
【问题描述】:
我想确认内核的panic()函数和其他的像kernel_halt()和machine_halt(),一旦被触发,保证机器完全冻结。
那么,所有内核和用户进程都被冻结了吗? panic() 是否可以被调度程序中断?中断处理程序仍然可以执行吗?
用例:如果出现严重错误,我需要确保硬件看门狗重置机器。为此,我需要确保 没有其他线程/进程 使看门狗保持活动状态。我需要触发系统完全停止。目前,在我的内核模块中,我只需调用panic() 即可冻结所有内容。
另外,用户空间的halt命令保证冻结系统?
谢谢。
编辑:根据:http://linux.die.net/man/2/reboot,我认为最好的方法是使用reboot(LINUX_REBOOT_CMD_HALT):“控制权交给ROM监视器,如果有的话”
【问题讨论】:
-
你可以在虚拟机中试一试。
-
如果现代 Linux 的
panic()实现类似于 UNIX,我认为这实际上取决于机器以及抢占式调度程序的调度方式。考虑到 Linux 设计得非常好,并且通常将安全作为首要考虑因素,我很确定panic()会停止调度程序。