這涉及到:https://stackoverflow.com/a/13413099/1284631Linux reboot()系統調用:爲什麼它在kernel_halt()之後調用do_exit(0)?
現在的問題是:
爲什麼重啓()系統調用,當LINUX_REBOOT_CMD_HALT
參數調用(在這裏看到:http://lxr.linux.no/linux+v3.6.6/kernel/sys.c#L480)在已經叫kernel_halt()
後調用do_exit(0)
,作爲呼叫kernel_halt()
歸結爲呼叫stop_this_cpu()
(見這裏: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()
永遠不會返回(它以無限循環結束)。
因此,在kernel_halt()
沒有完成它的工作並返回的情況下調用do_exit(0)
?爲什麼不直接用panic()
呢?
恐慌使內核失速,退出,可能重新啓動 –
@ eicto:是的,我同意這一點,我在我的文章結尾的短語中說同樣的事情。真正的問題是:爲什麼在* panic()之前調用do_exit(0)*?如果你想讓內核停止,退出或重啓,爲什麼不直接調用panic()? – user1284631