reboot - システムコールの説明 - Linux コマンド集 一覧表
名前
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
flag
, void *
arg
);
glibc では、関連する定数に RB_* というシンボリックな名前が付けられている。
ライブラリ関数の引数は 1 つで、
3 引数のシステムコールのラッパ (wrapper) となっている。
#include <unistd.h>
#include <sys/reboot.h>
int reboot(int
flag
);
説明
reboot ()はシステムを再起動する。または再起動のキーストロークである Ctrl-Alt-Delete (CAD) を有効/無効にする。 このキーストロークは 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 の値として指定できるようになった (これらの定数の 16 進での 表記にはちょっとした意味がある)。 flag 引数には以下の値を指定できる。
- LINUX_REBOOT_CMD_RESTART
- (RB_AUTOBOOT, 0x1234567) `Restarting system.' というメッセージが表示され、 デフォルトの再起動処理がただちに実行される。 先に sync (2) を行なわないと、データが失われる。
- LINUX_REBOOT_CMD_HALT
- (RB_HALT_SYSTEM, 0xcdef0123; 1.1.76 以降) `System halted.' というメッセージが表示され、システムは停止 (halt) する。 制御は ROM モニタに移る (ROM モニタがある場合)。 先に sync (2) を行なわないと、データが失われる。
- LINUX_REBOOT_CMD_POWER_OFF
- (0x4321fedc; 2.1.30 以降) `Power down' というメッセージが表示され、システムは停止 (stop) する。 可能な場合はシステムの電源が落とされる。 先に sync (2) を行なわないと、データが失われる。
- LINUX_REBOOT_CMD_RESTART2
- (0xa1b2c3d4; 2.1.30 以降) `Restarting system with command '%s'' というメッセージが表示され、 ただちに ( arg に指定されたコマンドを用いて) 再起動 (restart) が行われる。 先に sync (2) を行なわないと、データが失われる。
- LINUX_REBOOT_CMD_CAD_ON
- (RB_ENABLE_CAD, 0x89abcdef) CAD を有効にする。 これ以降に CAD キーストロークが入力されると、 ただちに LINUX_REBOOT_CMD_RESTART に関連付けられた動作が行われるようになる。
- LINUX_REBOOT_CMD_CAD_OFF
-
(RB_DISABLE_CAD, 0)
CAD を無効にする。
これ以降に CAD キーストロークが入力されると、
SIGINT シグナルが init (プロセス 1) に送られる。
このシグナルを受けると、おそらく init プロセスは
前もって定められた動作を行うことになる (多分すべてのプロセスの kill,
sync, 再起動)。
この関数を使えるのはスーパーユーザーだけである。
上述のアクションの実際の効果はアーキテクチャに依存する。 i386 アーキテクチャでは、現在のところ (2.1.122) 付加引数は 何も行わないが、再起動のタイプをカーネルのコマンドライン引数 (`reboot=...') によって定めることができる。 これには warm または cold と、 hard または BIOS 経由の再起動を 設定できる。
返り値
成功すれば0が返る。エラーならば-1が返り、 errno がエラーの内容にしたがってセットされる。
エラー
- EFAULT
- LINUX_REBOOT_CMD_RESTART2 の時にユーザースペースのデータの取得に 問題があった。
- EINVAL
- magic の数字か flag が間違っている。
- EPERM
- 呼び出し元プロセスに reboot ()を呼び出すのに十分な権限がなかった。 CAP_SYS_BOOT ケーパビリティが必要である。
準拠
reboot ()は Linux に特有であり、移植を考慮したプログラムでは用いるべきではない。