名 前
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) に よ っ て 変 更 で き る 。
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 進 で の 表 記 に は ち ょ っ と し た 意 味 が あ る )。
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 名
前 空 間 内 で の
動 作
Linux 3.4 以 降 で は 、
reboot() が 最 初 の PID
名 前 空 間 以 外
の PID 名 前 空 間
(pid_namespaces(7) 参 照 ) か
ら 呼 び 出 さ れ
た 場 合 、 呼 び
出 し の 効 果 と
し て 、 名 前 空
間 の "init" プ ロ
セ ス へ シ グ ナ
ル が 送 信 さ れ
る 。 LINUX_REBOOT_CMD_RESTART と
LINUX_REBOOT_CMD_RESTART2 の 場 合
、 SIGHUP シ グ ナ ル
が 送 信 さ れ る
。 LINUX_REBOOT_CMD_POWER_OFF と
LINUX_REBOOT_CMD_HALT の 場 合
、 SIGINT シ グ ナ ル
が 送 信 さ れ る
。
返 り 値
cmd が シ ス テ ム の 停 止 や 再 起 動 を 表 す 値 の 場 合 、 呼 び 出 し が 成 功 す る と reboot() は 返 ら な い 。 cmd が 他 の 値 の 場 合 に は 、 成 功 す る と 0 が 返 る 。 cmd の 値 に 関 わ ら ず 、 失 敗 の 場 合 に は −1 が 返 り 、 errno が 適 切 に 設 定 さ れ る 。
エ ラ ー
EFAULT |
LINUX_REBOOT_CMD_RESTART2 の 時 に ユ ー ザ ー ス ペ ー ス の デ ー タ の 取 得 に 問 題 が あ っ た 。 | ||
EINVAL |
magic の 数 字 か cmd が 間 違 っ て い る 。 呼 び 出 し 元 プ ロ セ ス に reboot() を 呼 び 出 す の に 十 分 な 権 限 が な か っ た 。 CAP_SYS_BOOT ケ ー パ ビ リ テ ィ が 必 要 で あ る 。 準 拠reboot() は Linux に 特 有 で あ り 、 移 植 を 考 慮 し た プ ロ グ ラ ム で は 用 い る べ き で は な い 。 関 連 項 目kexec_load(2), sync(2), bootparam(7), capabilities(7), ctrlaltdel(8), halt(8), reboot(8) こ の 文 書 に つ い てこ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。 |