我需要从用户空间进程重启Linux机箱。我想要有以下行为:
这些要求可以一起实现吗?
我打算在proc / sysrq-trigger中写一个'b'。有没有更好的办法? (不,这不会让我同步。)
谢谢!
答案 0 :(得分:3)
我假设你有根。
希望有所帮助。
答案 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将不会同步。