EN JA
REBOOT(2)
REBOOT(2) Linux Programmer's Manual REBOOT(2)

名前

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

書式

/* libc4 と libc5 でのライブラリコールとシステムコールは同じである。
またカーネル 2.1.30 以降では、定数としてシンボリックな名前
LINUX_REBOOT_* が定義されており、呼び出しの第 4 引数として
指定することができる。*/
 
#include <unistd.h>
 
#include <linux/reboot.h>
 
int reboot(int magic , int magic2 , int cmd , void * arg );
 
/* glibc では、関連する定数に RB_* というシンボリックな名前が付け
られている。ライブラリ関数の引数は 1 つで、3 引数のシステムコールの
ラッパ (wrapper) となっている。 */
 
#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; 1.1.76 以降) "System halted."というメッセージが表示され、システムは停止 (halt) する。制御は ROM モニタに移る (ROM モニタがある場合)。先に sync(2) を行なわないと、データが失われる。
LINUX_REBOOT_CMD_KEXEC (Linux 2.6.13 以降)
kexec_load(2) を使って事前にロードされたカーネルを実行する。このオプションが利用できるのは、カーネルのコンフィグで CONFIG_KEXEC が有効になっている場合にのみである。
LINUX_REBOOT_CMD_POWER_OFF
(0x4321fedc; 2.1.30 以降) "Power down"というメッセージが表示され、システムは停止 (stop) する。可能な場合はシステムの電源が落とされる。先に sync(2) を行なわないと、データが失われる。
LINUX_REBOOT_CMD_RESTART
(RB_AUTOBOOT, 0x1234567) "Restarting system."というメッセージが表示され、デフォルトの再起動処理がただちに実行される。先に sync(2) を行なわないと、データが失われる。
LINUX_REBOOT_CMD_RESTART2
(0xa1b2c3d4; 2.1.30 以降) "Restarting system with command '%s'"というメッセージが表示され、ただちに ( arg に指定されたコマンドを用いて) 再起動 (restart) が行われる。先に sync(2) を行なわないと、データが失われる。

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

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

返り値

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

エラー

EFAULT
LINUX_REBOOT_CMD_RESTART2 の時にユーザースペースのデータの取得に問題があった。
EINVAL
magic の数字か cmd が間違っている。
EPERM
呼び出し元プロセスに reboot() を呼び出すのに十分な権限がなかった。 CAP_SYS_BOOT ケーパビリティが必要である。

準拠

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

関連項目

sync(2), bootparam(7), ctrlaltdel(8), halt(8), reboot(8), capabilities(7)

この文書について

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