Linuxカーネルに関する技術情報を集めていくプロジェクトです。現在、Linuxカーネル2.6解読室の第2章までを公開中。
プロセスの終了はdo_exit関数で行われる。明示的にexitシステムコールを呼び出したとき以外にも、シグナルを受けて死ぬときなどにも呼び出される。do_exit関数ではtask_structを除く全ての資源の解放を行う。do_exitはexit_notify関数で親プロセスにSIGCHLDを送出する。SIGCHLDを受け取った親プロセスは、ZOMBIE状態になった子プロセスを探し出しtask_structの解放を行う。
do_exit(終了コード) { このプロセス用のタイマを止める(del_timer_sync関数) IPCセマフォの解放(sem_exit関数) 仮想空間の解放(__exit_mm関数) ファイルのクローズと管理域の解放(__exit_files関数) カレントディレクトリ、umask情報の解放(__exit_fs関数) シグナルの破棄と管理領域の解放(__exit_sighand関数) プロセス状態をTASK_ZOMBIEに変更する 親プロセスへの通知(exit_notify関数) CPUの放棄(schedule関数) }
親プロセスは、以下のrelease関数を用いてZOMBIEとなったtask_struct構造体の解放を行う。
release(ZOMBIEの子プロセス) プロセスidの解放(unhash_process関数) task_structの解放(free_task_struct関数)
(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST1
[PageInfo]
LastUpdate: 2008-08-27 14:17:48, ModifiedBy: hiromichi-m
[Permissions]
view:all, edit:login users, delete/config:members