Provided by: manpages-ja-dev_0.5.0.0.20180315+dfsg-1_all bug

名前

       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/ に書かれている。