- 135 名前:デフォルトの名無しさん [2006/07/01(土) 23:34:34 ]
- fork() で子プロセスを立ち上げるプログラムを書いてるのですが
(親プロセスは走り続けてイベントを待ち、時々 fork() して子プロセスに仕事をさせる) 子がシグナルを受けたときの親の wait() (wait4()) を呼ぶタイミングがわかりません。 親プロセスに SIGCHLD のハンドラをインストールしてその中で wait4() してみたの ですが、 それだと子プロセスがゾンビになる場合があるようです。(うまくいく場合もある) なお wait4() には WNOHANG をセットしてそこで親がハングしないようにしています。 シグナルハンドラ内の wait4() で駄目なときは、どうやらもっと後で wait4() を呼ぶと うまく子プロセスが刈られるようです。 ただ、それは実験的に親のプログラムのいろんなところに wait4() を埋め込んだ らゾンビが出ないのがわかっただけなんで、それでいいとは思えません。 こういうプログラムの場合 wait() ってどういうタイミングで呼べばいいんでしょうか。 あるいはタイミング以外に問題があるでしょうか。(ソースコードがないと厳しいかな?) ちなみに OS は Mac OS X 10.4.6 です。
|

|