从用户空间重启Linux框

时间:2009-05-12 14:52:38

标签: linux reboot

我需要从用户空间进程重启Linux机箱。我想要有以下行为:

  1. 同步文件系统
  2. 没有尝试优雅地停止进程,转到运行级别5/6等,因为我认为事情很糟糕而且会失败
  3. 这些要求可以一起实现吗?

    我打算在proc / sysrq-trigger中写一个'b'。有没有更好的办法? (不,这不会让我同步。)

    谢谢!

4 个答案:

答案 0 :(得分:3)

我假设你有根。

  • sysrq-trigger的事情很好,你只需要先回复几次,这是一个“紧急同步”。
  • 您还可以查看'-n'选项以关闭(8)。这是一种做你想做的事情的罐头方式。它只发送SIGTERM,SIGKILL,同步并关闭或重新启动(-h或-r选项。)

希望有所帮助。

答案 1 :(得分:2)

好吧,执行sync(1),kill -1,再次同步,kill -9 -1,sync,poweroff -f。

我想这应该可以做到!

答案 2 :(得分:1)

这直接来自sys / reboot.h:

#ifndef _SYS_REBOOT_H
#define _SYS_REBOOT_H   1

#include <features.h>

/* Perform a hard reset now.  */
#define RB_AUTOBOOT     0x01234567

/* Halt the system.  */
#define RB_HALT_SYSTEM  0xcdef0123

/* Enable reboot using Ctrl-Alt-Delete keystroke.  */
#define RB_ENABLE_CAD   0x89abcdef

/* Disable reboot using Ctrl-Alt-Delete keystroke.  */
#define RB_DISABLE_CAD  0

/* Stop system and switch power off if possible.  */
#define RB_POWER_OFF    0x4321fedc

__BEGIN_DECLS

/* Reboot or halt the system.  */
extern int reboot (int __howto) __THROW;

__END_DECLS

#endif  /* _SYS_REBOOT_H */

我相信RB_HALT_SYSTEM会处理所有sync()等等。我通常自己这样做,最后用RB_AUTOBOOT触发重启。

答案 3 :(得分:0)

在普通的发行版中,最简单的方法是:

system("/sbin/reboot -f");

这将同步所有文件系统,然后立即重启。请注意,sysrq b将不会同步。