Provided by: manpages-ja-dev_0.5.0.0.20180315+dfsg-1_all
名前
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_SUCCESS と EXIT_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_SUCCESS と EXIT_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/ に書かれている。