Linuxの備忘録とか・・・(目次へ)Linuxの備忘録とか・・・(目次へ)wait処理waitは終了プロセスだけをウエイトするものでなく、プロセスがシグナル/トレースで一時停止した場合、またそこから再実行した場合においても、かかる処理を行います。wait_consider_task関数へと渡って行きます。do_wait関数でwaitするプロセスのスレッドグループのプロセスに対して、1つづつチェックします(__WNOTHREADオプションに依存)、do_wait_thread関数ではこのプロセスの子プロセスを調べていきます。応じたwait処理への関数がコールされます。eligible_child関数で、CLON_THREDのプロセスが対象となるかどうかのチェックをします。これは指定されたオプション(__WCLONE/__WALL)との兼ね合いで決まります。ptrace引数が0で、子プロセスがトレースされていたら対象外です。ptrace引数はdo_wait_thread関数から本関数をコールする時に指定されるもので、まずトレースされていない子プロセスを、そしてそこに対象子プロセスがなければ、本引数を1にしてトレースされている子プロセスとチェックしています。対象プロセスがEXIT_DEAD状態だと処理する必要はありません。!delay_group_leader(p))でEXIT_ZOMBIE状態のプロセスに対してwait_task_zombie関数をコールします。delay_group_leader関数はスレッドグループリーダで、そこにサブスレッドを有しているなら1を返します。従ってそうでない子プロセスが対象となるわけですが、その意味するところはわかりません。task_is_stopped_or_traced関数で一時停止/トレースの子プロセスなら、wait_task_stopped関数を、それ以外ならwait_task_continued関数でコールします。ruに統計情報を設定することにあります。infopには子プロセスからの送られたシグナルの情報(シグナル番号とかプロセスID)が設定されます。stat_addrには子プロセスのexit_codeが、ruにはリソース情報(CPUどどれくらい使用したとか、ページをどれくらい要求したとか)が設定されます。wait_task_zombie関数のみ子プロセスのプロセスディスクリプタを解放します。WNOWAITの時その限りではありません。ノースAdsense広告情報が設定されていません。