Show page source of internal22-10-exit #25332

[[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)]]