REBOOT - Linux手册页

时间:2019-08-20 17:59:13  来源:igfitidea点击:

Linux程序员手册 第2部分
更新日期: 2019-03-06

名称

reboot-重新启动或启用/禁用Ctrl-Alt-Del

语法

/ 从2.1.30版内核开始,有符号名称LINUX_REBOOT_ *
常数和第四个参数:
/
#include <unistd.h>
#include <linux/reboot.h>
int reboot(int magic, int magic2, int cmd, void *arg);

/ *在glibc和大多数替代libc(包括uclibc,Dietlibc,
肌肉和其他少数几个),其中一些涉及的常数
符号名称RB_ 和库调用为1参数
围绕系统调用的包装器:
/
#include <unistd.h>
#include <sys/reboot.h>

说明

reboot()调用将重新引导系统,或启用/禁用重新引导键击(缩写为CAD,因为默认值为Ctrl-Alt-Delete;可以使用loadkeys(1)对其进行更改)。

除非magic等于LINUX_REBOOT_MAGIC1(即0xfee1dead)并且magic2等于LINUX_REBOOT_MAGIC2(即672274793),否则此系统调用将失败(错误EINVAL)。但是,从2.1.17开始,还允许LINUX_REBOOT_MAGIC2A(即85072278),并且从2.1.97开始还具有LINUX_REBOOT_MAGIC2B(即369367448),从2.5.71开始,还允许LINUX_REBOOT_MAGIC2C(即537993216)作为magic2的值。 (这些常量的十六进制值是有意义的。)

cmd参数可以具有以下值:

LINUX_REBOOT_CMD_CAD_OFF
(RB_DISABLE_CAD,0)。 CAD已禁用。这意味着CAD击键将导致将SIGINT信号发送到init(进程1),随后此进程可能会决定采取适当的措施(可能是:杀死所有进程,同步,重新启动)。
LINUX_REBOOT_CMD_CAD_ON
(RB_ENABLE_CAD,0x89abcdef)。 CAD已启用。这意味着CAD击键将立即引起与LINUX_REBOOT_CMD_RESTART相关的动作。
LINUX_REBOOT_CMD_HALT
(RB_HALT_SYSTEM,0xcdef0123;从Linux 1.1.76开始)。消息"系统已停止"。打印,然后系统停止。如果有,则控制权交给ROM监视器。如果未在sync(2)之前,则数据将丢失。
LINUX_REBOOT_CMD_KEXEC
(RB_KEXEC,0x45584543,从Linux 2.6.13开始)。执行一个先前用kexec_load(2)加载的内核。仅当内核配置有CONFIG_KEXEC时,此选项才可用。
LINUX_REBOOT_CMD_POWER_OFF
(RB_POWER_OFF,0x4321fedc;从Linux 2.1.30开始)。消息"关闭电源"。如果可能,则打印,停止系统并断开系统的所有电源。如果未在sync(2)之前,则数据将丢失。
LINUX_REBOOT_CMD_RESTART
(RB_AUTOBOOT,0x1234567)。消息"正在重新启动系统"。打印出来,并立即执行默认重启。如果未在sync(2)之前,则数据将丢失。
LINUX_REBOOT_CMD_RESTART2
(0xa1b2c3d4;自Linux 2.1.30起)。显示消息"使用命令aq%saq重新启动系统",并立即执行重新启动(使用arg中给出的命令字符串)。如果未在sync(2)之前,则数据将丢失。
LINUX_REBOOT_CMD_SW_SUSPEND
(RB_SW_SUSPEND,0xd000fce1;从Linux 2.5.18开始)。系统被挂起(休眠)到磁盘。仅当内核配置了CONFIG_HIBERNATION时,此选项才可用。

只有超级用户可以调用reboot()。

上述操作的确切效果取决于体系结构。对于i386架构,附加参数目前不执行任何操作(2.1.122),但是重新启动的类型可以由内核命令行参数(" reboot = ...")确定为暖还是冷,并通过硬盘或BIOS。

Behavior inside PID namespaces

从Linux 3.4开始,如果从具有以下列出的cmd值之一的初始PID名称空间之外的PID名称空间调用reboot(),它将执行该名称空间的"重新启动":PID名称空间的" init"过程立即进行终止,效果如pid_namespaces(7)中所述。

在这种情况下,在调用reboot()时可以在cmd中提供的值如下:

LINUX_REBOOT_CMD_RESTART, LINUX_REBOOT_CMD_RESTART2
" init"进程终止,父进程中的wait(2)报告该子进程已通过SIGHUP信号杀死。
LINUX_REBOOT_CMD_POWER_OFF, LINUX_REBOOT_CMD_HALT
" init"进程终止,父进程中的wait(2)报告该子进程已通过SIGINT信号杀死。

对于其他cmd值,reboot()返回-1,并且errno设置为EINVAL。

返回值

对于停止或重新启动系统的cmd值,不会返回成功调用reboot()的信息。对于其他cmd值,成功返回零。在所有情况下,失败均返回-1,并正确设置errno。

错误说明

EFAULT
在LINUX_REBOOT_CMD_RESTART2下获取用户空间数据的问题。
EINVAL
错误的魔术数字或cmd。
EPERM
调用过程没有足够的特权来调用reboot();调用者的用户名称空间内必须具有CAP_SYS_BOOT。

遵循规范

reboot()是特定于Linux的,不应在旨在可移植的程序中使用。

另外参见

systemctl(1),systemd(1),kexec_load(2),sync(2),bootparam(7),capabilities(7),ctrlaltdel(8),halt(8),shutdown(8)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/