[[PageNavi(internal22-navi)]]
{{{ comment
h2w-title:exit
}}}
== exit == #SECTION02133000000000000000
プロセスの終了はdo_exit関数で行われる。明示的にexitシステムコールを呼び出したとき以外にも、シグナルを受けて死ぬときなどにも呼び出される。do_exit関数ではtask_structを除く全ての資源の解放を行う。do_exitはexit_notify関数で親プロセスにSIGCHLDを送出する。SIGCHLDを受け取った親プロセスは、ZOMBIE状態になった子プロセスを探し出しtask_structの解放を行う。
{{{
do_exit(終了コード)
{
このプロセス用のタイマを止める(del_timer関数)
IPCセマフォの解放(sem_exit関数)
仮想空間の解放(__exit_mm関数)
ファイルのクローズと管理域の解放(__exit_files関数)
カレントディレクトリ、umask情報の解放(__exit_fs関数)
シグナルの破棄と管理領域の解放(__exit_sighand関数)
プロセス状態をTASK_ZOMBIEに変更する
親プロセスへの通知(exit_notify関数)
CPUの放棄(schedule関数)
}
}}}
親プロセスは、以下のrelease関数を用いてZOMBIEとなったtask_struct構造体の解放を行う。
{{{
release(ZOMBIEの子プロセス)
タスク登録テーブルのスロットを開放(add_free_taskslot関数)
プロセスidの解放(unhash_pid関数)
task_structの解放(free_task_struct解放)
}}}
----
''(NIS)HirokazuTakahashi [[BR]]2000年06月11日 (日) 22時29分57秒 JST''1
[[PageNavi(internal22-navi)]]