【发布时间】:2012-11-07 06:26:58
【问题描述】:
这与:https://stackoverflow.com/a/13413099/1284631
现在的问题是:
为什么 reboot() 系统调用,当使用 LINUX_REBOOT_CMD_HALT 参数调用时(参见此处:http://lxr.linux.no/linux+v3.6.6/kernel/sys.c#L480)在已经调用 kernel_halt() 之后调用 do_exit(0),因为调用 kernel_halt() 归结为调用 @987654329 @(参见此处:http://lxr.linux.no/linux+v3.6.6/arch/x86/kernel/process.c#L519),作为native_machine_halt() 的一部分(参见此处:http://lxr.linux.no/linux+v3.6.6/arch/x86/kernel/reboot.c#L680)。
或者,在我看来stop_this_cpu() 永远不会返回(它以无限循环结束)。
所以,它是 do_exit(0) 被调用以防万一 kernel_halt() 没有完成它的工作并返回?那为什么不直接panic()呢?
【问题讨论】:
-
panic 使内核停止,退出,可能重新启动
-
@eicto:是的,我同意这一点,我在帖子的结尾处说了同样的话。真正的问题是:为什么在panic()之前调用do_exit(0)?如果要让内核停顿、退出或重启,为什么不直接调用panic()呢?
标签: linux kernel system-calls reboot halt