_exit() - プロセスの終了とクリーンアップのバイパス

標準

標準/拡張機能 C/C++ 依存項目

POSIX.1
XPG4
XPG4.2
Single UNIX Specification、バージョン 3

両方  

形式

#define _POSIX_SOURCE
#include <unistd.h>

void _exit(int status);

機能説明

現行プロセスを終了して、システムで使用できる プロセス用の状況値を作成します。

status 引数には、終了中のプロセス用の戻り状況を指定します。プロセスの終了の結果は、以下のとおりです。
  • _exit() は、呼び出し元のオープン・ファイル記述子とディレクトリー・ストリームのすべてをクローズする。
  • wait() または waitpid() のために呼び出し元の親が現在中断されて いる場合、status の下位 8 ビットを、その親が使用できるように なる。これらの 8 ビットへのアクセスについての詳細は、waitpid() - 特定の子プロセス終了の待機を参照してください。
  • wait() または waitpid() によって呼び出し元の親が現在中断されて いない場合は、_exit() は status 値を保管し、その親 が wait() または waitpid() を呼び出したときにその値を親に戻すことが できるようにする。
  • SIGCHILD シグナルが親プロセスに送信される。
  • _exit() を呼び出すプロセスが制御プロセスの場合、この呼び出し元 に所属する制御端末のフォアグラウンド・プロセス・グループの各プロセス に、SIGHUP シグナルが送信される。
  • _exit() を呼び出すプロセスが制御プロセスの場合、これに関連して いる制御端末の関連付けがセッションから _exit() によって解除される。新規制御プロセスは、その後で端末を取得することができる。
  • プロセスから脱出しても、その子プロセスを直接的に終了しない。SIGHUP シグナルは、場合によっては子を終了することがある。プロセスが終了したときに生き残った (終了しなかった) 子には、新しい親のプロセス ID が割り当てられる。新しい親のプロセス ID は常に 1 で、これはすべてのプロセスのルート上位であることを示す。
  • プロセスが終了し、プロセス・グループを孤立化した場合、およびそのグループのメンバーを停止した場合、グループの各メンバーには SIGHUP シグナル、続いて SIGCONT シグナルが送られる。
  • すべてのスレッドは終了し、それらのリソースはクリーンアップされた (スレッド は、z/OS®UNIX 呼び出し可能サービスを呼び出す MVS™ タスクである)。POSIX レベルのスレッド・クリーンアップ・ルーチンは、実行されません。このルーチンには、pthread_cleanup_push() で作成された クリーンアップ・ルーチンと pthread_key_create() で作成された デストラクター・ルーチンが含まれている。
以上の結果は、プロセスが終了するたびに起こります。_exit() では、C ランタイム・ライブラリーのクリーンアップは実行 されません。したがって、ストリーム・バッファーが必ずフラッシュされる とは限りません。
注: _exit() は、TSO/E アドレス・スペースから発行された場合、呼び出しタスクとそのサブタスクのすべてを終了します。

C++ の特殊な動作: _exit() が C++ プログラムで呼び出された場合、プログラムは、現行ブロックから出ずに終了し、デストラクターが、ローカル (自動) 変数のために呼び出されることはありません。 さらに、exit() とは異なり、グローバル (静的) 変数用の デストラクターは呼び出されません。

戻り値

_exit() は常に正常終了し、値を戻しません。

この関数では、errno に値は保管されません。

CELEBE05
⁄* CELEBE05

   This example ends a process.

 *⁄
#define _POSIX_SOURCE
#include <unistd.h>
#include <stdio.h>

main() {
  puts("Remember that stream buffers are not automatically");
  puts("flushed before _exit()!");
  fflush(NULL);
  _exit(0);
}
出力:
Remember that stream buffers are not automatically
flushed before _exit()!

関連情報