重启行为的差异

重启行为的差异

我有两台运行 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 的开发商。您可以给他们的支持人员打电话,看看他们是否也能为您提供帮助。

相关内容