在C中安全重启linux

时间:2015-12-07 12:28:30

标签: c linux api reboot

如何在没有exec的情况下从C中进行shell命令reboot的安全重启? reboot.h中的重启功能不安全。它没有同步和probaly没有卸载和安全的进程终止。什么函数有魔术参数?

投注问候

2 个答案:

答案 0 :(得分:1)

最简单的方法:

system('reboot')

否则,您有Linux: Programatically shutdown or reboot computer from a user-level process

答案 1 :(得分:1)

事实上,有些系统在没有正确卸载分区的情况下完成重启,导致文件系统错误。例如,Android仅强制文件系统挂载到只读(通过issuing“u”命令挂载到 sysrq-trigger )。如果你没有专注于性能而你更希望系统能够干净地关闭,而不是很快,那么你需要执行以下步骤:

  • 停止主 init 循环。没有一种方法可以做到这一点,它取决于系统正在使用的 init 实现。您需要停止主 init 循环,因为您不希望 init 重新启动您将在下一步开始执行的进程。
  • 向所有流程发出“停止”信号,让他们完成行动
  • 如果“停止”花费的时间太长,请向所有进程发出“kill”信号。在卸载之前,您不希望具有打开文件的进程。
  • 将所有分区卸载为只读
  • 通过发出 reboot 标准电话,要求内核关闭机器。

您可以使用killumountreboot等来自C代码执行上述所有步骤。

正如我之前所说,Android在干净关闭方面不是最好的例子,但您可以查看示例C代码关闭实现here