_exit()
システムコールはプロセスを終了させ、以降のような結果をもたらします:
- 呼び出し元プロセス内のすべての記述子が閉じられます。
これには遅延が伴うことがあります。
たとえば、出力がすべて出されてしまうのを待機することです。
この状態のプロセスは既に死にかけているので、新たに kill はできません。
- 呼び出し元プロセスの親プロセスに、未解決の
wait(2)
呼び出しがある場合または
SIGCHLD
シグナルを捕捉した場合、呼び出し元プロセスの終了が親プロセスに通知され、
wait(2)
で定義されたように
status
が設定されます。
- 呼び出し元プロセスに子プロセスが存在するなら、それらすべての子プロセスの
親プロセス ID は 1 に設定されます。
初期化プロセス
(intro(2)
の
定義
セクションを参照)
が、これらの各プロセスを継承します。
- プロセスの終了によっていずれかのプロセスグループが親のない子になる場合
(通常はグループのメンバ全員に対する親が終了したため。
intro(2)
の
"親のないプロセスグループ (Orphaned Process Group)"
を参照)、そして親のないグループのメンバのいずれかが停止されている場合、
その新たな親のないプロセスグループのすべてのメンバに
SIGHUP
シグナルと
SIGCONT
シグナルが送信されます。
- プロセスが制御プロセスの場合
(intro(2)
を参照)、
SIGHUP
シグナルが制御端末のフォアグラウンドプロセスグループに送信され、
制御端末への現在のすべてのアクセスが無効にされます。
ほとんどの C プログラムはライブラリルーチン
exit(3)
を呼び出します。
これはバッファをフラッシュし、ストリームを閉じ、
一時ファイルをアンリンクするなどした後に
_exit()
を呼び出します。