REBOOT

Section: Linux Programmer's Manual (2)
Updated: 2019-03-06
Index JM Home Page
 

名前

reboot - 再起動する。または Ctrl-Alt-Delを有効・無効にする  

書式

/* カーネル 2.1.30 以降では、定数としてシンボリックな名前
   LINUX_REBOOT_* が定義されており、呼び出しの第 4 引数として
   指定することができる。*/

#include <unistd.h>
#include <linux/reboot.h>

int reboot(int magic, int magic2, int cmd, void *arg);

/* Under glibc and most alternative libc's (including uclibc, dietlibc,
   musl and a few others), some of the constants involved have gotten
   symbolic names RB_*, and the library call is a 1-argument
   wrapper around the system call: */

#include <unistd.h>
#include <sys/reboot.h>

int reboot(int cmd);  

説明

reboot() はシステムを再起動する。または再起動のキーストロークである Ctrl-Alt-Delete (CAD) を有効/無効にする。 このキーストロークは loadkeys(1) によって変更できる。

magicLINUX_REBOOT_MAGIC1 (値は 0xfee1dead) であり、かつ magic2LINUX_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 の値として指定できるようになった (これらの定数の 16 進での 表記にはちょっとした意味がある)。

cmd 引数には以下の値を指定できる。

LINUX_REBOOT_CMD_CAD_OFF
(RB_DISABLE_CAD, 0) CAD を無効にする。 これ以降に CAD キーストロークが入力されると、 SIGINT シグナルが init (プロセス 1) に送られる。 このシグナルを受けると、おそらく init プロセスは 前もって定められた動作を行うことになる (多分すべてのプロセスの kill, sync, 再起動)。
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 以降) "System halted." というメッセージが表示され、システムは停止 (halt) する。 制御は ROM モニタに移る (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 以降) "Power down" というメッセージが表示され、システムは停止 (stop) する。 可能な場合はシステムの電源が落とされる。 先に sync(2) を行なわないと、データが失われる。
LINUX_REBOOT_CMD_RESTART
(RB_AUTOBOOT, 0x1234567) "Restarting system." というメッセージが表示され、 デフォルトの再起動処理がただちに実行される。 先に sync(2) を行なわないと、データが失われる。
LINUX_REBOOT_CMD_RESTART2
(0xa1b2c3d4; Linux 2.1.30 以降) "Restarting system with command '%s'" というメッセージが表示され、 ただちに ( arg に指定されたコマンドを用いて) 再起動 (restart) が行われる。 先に sync(2) を行なわないと、データが失われる。
LINUX_REBOOT_CMD_SW_SUSPEND
(RB_SW_SUSPEND, 0xd000fce1; Linux 2.5.18 以降). システムがディスクにサスペンド (ハイバネーション) される。このオプションはカーネルで CONFIG_HIBERNATION が有効になっている場合にのみ利用できる。

スーパーユーザーだけが reboot() を呼び出すことができる。

上述のアクションの実際の効果はアーキテクチャーに依存する。 i386 アーキテクチャーでは、現在のところ (2.1.122) 付加引数は 何も行わないが、再起動のタイプをカーネルのコマンドライン引数 ("reboot=...") によって定めることができる。 これには warm または cold と、 hard または BIOS 経由の再起動を 設定できる。  

PID 名前空間内での動作

Since Linux 3.4, if reboot() is called from a PID namespace other than the initial PID namespace with one of the cmd values listed below, it performs a "reboot" of that namespace: the "init" process of the PID namespace is immediately terminated, with the effects described in pid_namespaces(7).

The values that can be supplied in cmd when calling reboot() in this case are as follows:

LINUX_REBOOT_CMD_RESTART, LINUX_REBOOT_CMD_RESTART2
The "init" process is terminated, and wait(2) in the parent process reports that the child was killed with a SIGHUP signal.
LINUX_REBOOT_CMD_POWER_OFF, LINUX_REBOOT_CMD_HALT
The "init" process is terminated, and wait(2) in the parent process reports that the child was killed with a SIGINT signal.

For the other cmd values, reboot() returns -1 and errno is set to EINVAL.  

返り値

cmd がシステムの停止や再起動を表す値の場合、呼び出しが成功すると reboot() は返らない。 cmd が他の値の場合には、成功すると 0 が返る。 cmd の値に関わらず、失敗の場合には -1 が返り、 errno が適切に設定される。  

エラー

EFAULT
LINUX_REBOOT_CMD_RESTART2 の時にユーザースペースのデータの取得に問題があった。
EINVAL
magic の数字か cmd が間違っている。
EPERM
The calling process has insufficient privilege to call reboot(); the caller must have the CAP_SYS_BOOT inside its user namespace.
 

準拠

reboot() は Linux に特有であり、移植を考慮したプログラムでは用いるべきではない。  

関連項目

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

この文書について

この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。


関連キーワード

LINUX, CMD, cmd, RB, int, process, ted, PID, init, データ 

Index

名前
書式
説明
PID 名前空間内での動作
返り値
エラー
準拠
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 13:30:30 GMT, January 09, 2022