標準
標準/拡張機能 |
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()!