kazmax - Linux で自宅サーバー

exit - ライブラリコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. 準拠
  6. 注意
  7. 関連項目

名前

exit - プロセスの正常終了

書式

#include <stdlib.h>

void exit(int status);

説明

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

atexit () や on_exit () によって 登録された全ての関数は、それらが登録された順番と逆順にコールされる。 (登録された関数の中で atexit () or on_exit () を使って exit 処理中に実行される追加の関数を登録することができる; 新規に登録された関数は、この後で実行される関数リストの先頭に 追加される。)

オープン中のストリームは全てフラッシュされて、クローズされる。 tmpfile () によって作成されたファイルは削除される。

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

返り値

exit () 関数は返らない。

準拠

SVr4, 4.3BSD, POSIX.1-2001.

注意

atexit () や on_exit () を使って登録された関数の中で exit () か longjmp () が呼び出された場合、 何が起こるかは未定義である。

EXIT_SUCCESS と EXIT_FAILURE を使うと、 0 と非 0 (1 や -1) を使うのに比べて (Unix 以外の環境に) 移植するのがいくらか簡単になる。 特に VMS は別の方式を用いている。

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

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

SIGCHLD シグナルのサポートが実装されている場合、 このシグナルは親プロセスに送られる。 親プロセスが SA_NOCLDWAIT を設定した場合、 SIGCHLD シグナルが送られるかどうかは定義されていない。

そのプロセスがセッションのリーダーで、 そのプロセスの制御端末がそのセッションの制御端末である場合、 この制御端末のフォアグラウンドプロセスグループにある 各プロセスに SIGHUP シグナルが送られ、 端末がセッションから切り離される。 これにより新しい制御プロセスを取得することができる。

プロセスが終了することにより、プロセスグループが孤立して、 そのグループのメンバーのうちのどれかが停止した場合、 プロセスグループの各プロセスに対して SIGHUP シグナルが送られ、続いて SIGCONT シグナルが送られる。

関連項目