Manpages

名 前

exit − プ ロ セ ス の 正 常 終 了

書 式

#include <stdlib.h>

void exit(int status);

説 明

exit() 関 数 は 、 プ ロ セ ス を 正 常 に 終 了 さ せ 、 status & 0377 と い う 値 を 親 プ ロ セ ス へ 返 す (wait(2) を 参 照 )。

atexit(3)on_exit(3) に よ っ て 登 録 さ れ た 全 て の 関 数 は 、 そ れ ら が 登 録 さ れ た 順 番 と 逆 順 に コ ー ル さ れ る 。 (登 録 さ れ た 関 数 の 中 で atexit(3) or on_exit(3) を 使 っ て exit 処 理 中 に 実 行 さ れ る 追 加 の 関 数 を 登 録 す る こ と が で き る ; 新 規 に 登 録 さ れ た 関 数 は 、 こ の 後 で 実 行 さ れ る 関 数 リ ス ト の 先 頭 に 追 加 さ れ る 。 ) こ れ ら の 関 数 の 一 つ が 返 ら な か っ た 場 合 (例 え ば 、 そ の 関 数 が _exit(2) を 呼 び 出 し た り 、 シ グ ナ ル で 自 分 自 身 を kill し た 場 合 )、 残 り の 関 数 は ど れ も 呼 び 出 さ れ ず 、 そ れ 以 降 の exit 処 理 (特 に stdio(3) ス ト リ ー ム の フ ラ ッ シ ュ な ど ) は 中 止 さ れ る 。 あ る 関 数 が atexit(3)on_exit(3) を 使 っ て 複 数 回 登 録 さ れ て い た 場 合 、 そ の 関 数 は 登 録 さ れ た の と 同 じ 回 数 だ け 呼 び 出 さ れ る 。 オ ー プ ン 中 の stdio(3) ス ト リ ー ム は 全 て フ ラ ッ シ ュ さ れ て 、 ク ロ ー ズ さ れ る 。 tmpfile(3) に よ っ て 作 成 さ れ た フ ァ イ ル は 削 除 さ れ る 。

C 標 準 で は EXIT_SUCCESSEXIT_FAILURE と い う 2つ の 定 数 が 定 義 さ れ て い る 。 そ れ ぞ れ 正 常 終 了 と 異 常 終 了 を 示 す も の で 、 exit() と し て 渡 す こ と が で き る 。

返 り 値

exit() 関 数 は 返 ら な い 。

属 性

マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 )

exit() 関 数 は 保 護 さ れ て い な い グ ロ ー バ ル 変 数 を 使 用 し て い る た め 、 ス レ ッ ド セ ー フ で は な い 。

準 拠

SVr4, 4.3BSD, POSIX.1−2001, C89, C99.

注 意

atexit(3)on_exit(3) を 使 っ て 登 録 さ れ た 関 数 の 中 で exit() か longjmp(3) が 呼 び 出 さ れ た 場 合 、 何 が 起 こ る か は 未 定 義 で あ る 。 execve(2) を 呼 び 出 す と 、 atexit(3)on_exit(3) を 使 っ て 登 録 さ れ た 関 数 が 削 除 さ れ る 点 に 注 意 す る こ と 。

EXIT_SUCCESSEXIT_FAILURE を 使 う と 、 0 や (1 や −1 と い っ た ) 0 以 外 の 値 を 使 う の に 比 べ て (UNIX 以 外 の 環 境 に ) 移 植 す る の が い く ら か 簡 単 に な る 。 特 に VMS は 別 の 方 式 を 用 い て い る 。

BSD は 終 了 コ ー ド を 標 準 化 し よ う と し て い る ; <sysexits.h> を 参 照 す る こ と 。

exit() の 後 、 親 プ ロ セ ス に 終 了 ス テ ー タ ス が 渡 さ れ な け れ ば な ら な い 。 終 了 ス テ ー タ ス の 渡 し 方 に は 3 つ の 場 合 が あ る 。 親 プ ロ セ ス が SA_NOCLDWAIT を 設 定 し た 場 合 、 ま た は SIGCHLD ハ ン ド ラ ー を SIG_IGN に 設 定 し た 場 合 、 ス テ ー タ ス は 破 棄 さ れ る 。 親 プ ロ セ ス が 子 プ ロ セ ス の 終 了 を 待 っ て い る 場 合 、 親 プ ロ セ ス に 終 了 ス テ ー タ ス が 伝 え ら れ る 。 ど ち ら の 場 合 で も exit の プ ロ セ ス は 直 ち に 終 了 す る 。 「 終 了 ス テ ー タ ス を 関 知 せ ず 終 了 も 待 た な い 」 と い う こ と を 親 プ ロ セ ス が 指 示 し て い な い 場 合 、 exit プ ロ セ ス は (終 了 ス テ ー タ ス を 表 す 1 バ イ ト の み を 保 持 す る ) 「 ゾ ン ビ 」 プ ロ セ ス に な る 。 こ れ に よ り 、 後 か ら wait(2) 関 数 を 呼 び 出 す こ と で 、 親 プ ロ セ ス は 終 了 ス テ ー タ ス を 知 る こ と が で き る 。

SIGCHLD シ グ ナ ル の サ ポ ー ト が 実 装 さ れ て い る 場 合 、 こ の シ グ ナ ル は 親 プ ロ セ ス に 送 ら れ る 。 親 プ ロ セ ス が SA_NOCLDWAIT を 設 定 し た 場 合 、 SIGCHLD シ グ ナ ル が 送 ら れ る か ど う か は 定 義 さ れ て い な い 。 そ の プ ロ セ ス が セ ッ シ ョ ン の リ ー ダ ー で 、 そ の プ ロ セ ス の 制 御 端 末 が そ の セ ッ シ ョ ン の 制 御 端 末 で あ る 場 合 、 こ の 制 御 端 末 の フ ォ ア グ ラ ウ ン ド プ ロ セ ス グ ル ー プ に あ る 各 プ ロ セ ス に SIGHUP シ グ ナ ル が 送 ら れ 、 端 末 が セ ッ シ ョ ン か ら 切 り 離 さ れ る 。 こ れ に よ り 新 し い 制 御 プ ロ セ ス を 取 得 す る こ と が で き る 。 プ ロ セ ス が 終 了 す る こ と に よ り 、 プ ロ セ ス グ ル ー プ が 孤 立 し て 、 そ の グ ル ー プ の メ ン バ ー の う ち の ど れ か が 停 止 し た 場 合 、 プ ロ セ ス グ ル ー プ の 各 プ ロ セ ス に 対 し て SIGHUP シ グ ナ ル が 送 ら れ 、 続 い て SIGCONT シ グ ナ ル が 送 ら れ る 。 孤 立 し た (orphaned) プ ロ セ ス グ ル ー プ の 説 明 は setpgid(2) を 参 照 。

関 連 項 目

_exit(2), setpgid(2), wait(2), atexit(3), on_exit(3), tmpfile(3)

こ の 文 書 に つ い て

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