我有两台运行 Linux 的机器。
在一台机器上,reboot 命令是所有 Linux 发行版中常见的可执行文件。
在第二台机器中,reboot 命令是一个使用其他硬件工具命令定制的 shell 脚本,用于重新启动系统。
两台机器之间的一个行为差异是,当我reboot
在第一台机器上执行命令时,它会显示另一个 shell 提示符,然后重新启动。
但在第二台机器的情况下,它重新启动而不显示 shell 提示符。我期望第二台机器在给出重新启动命令时的行为与第一台机器相同。
shutdown.c
目前我正在分析 Linux 发行版中常见的源代码halt.c
,以便我可以找出在重启时产生 shell 提示的实现并在第二台机器的 shell 脚本中使用它。
请给我一些指点,告诉我应该从哪里开始寻找实现。
谢谢
答案1
改用shutdown -r
。从历史上看,它已在各种 unices 中使用,因此我相信它的界面和行为更为人所知且可预测。
答案2
我的猜测是该程序将自身双重分叉到后台。
答案3
我预计返回提示符的程序实际上本身不执行任何操作,而是与您的 init 守护进程(sysvinit 或 upstart 或作为进程 1 运行的任何程序)通信并要求其关闭系统。另一个脚本只是一个普通脚本。
答案4
Linux 内核发出最终的系统调用来重启机器,而不是用户空间。很可能,内核在内部使用 IPMI 来重启机器。系统有不同的关机和重启方法。我遇到过一些系统需要你按下 RTC 上的一个引脚才能重启系统,而这正是内核为该机器所做的。
机器的架构是什么?ARM、MIPS 还是其他?如果我没记错的话,WindRiver 是 VxWorks 的开发商。您可以给他们的支持人员打电话,看看他们是否也能为您提供帮助。