Path: jaist-news.jaist!coconuts.jaist!wnoc-tyo-news!news.join.ad.jp!newsserver.jvnc.net!newshub.northeast.verio.net!newsfeed.cwix.com!210.170.134.51!newsfeed1.dti.ad.jp!nspixp2!nf1.air.ad.jp!nf4.iij.ad.jp!nr0.iij.ad.jp!news.iij.ad.jp!news.sra.co.jp!news2.sra.co.jp!not-for-mail From: Noriyuki Soda Newsgroups: fj.unix Subject: Re: [Q] How to kill child process when parent died Date: 11 Dec 1998 17:26:20 +0900 Organization: Software Research Associates, Inc., Japan Lines: 51 Message-ID: References: <4qbule$ndq@news3.iij.ad.jp> <4qd81f$cuq@masamune.dais.is.tohoku.ac.jp> <31C8B099.1B4@psn.or.jp> <6veom3$l6b$1@sranhh.sra.co.jp> NNTP-Posting-Host: srapc342.sra.co.jp X-Newsreader: Gnus v5.3/Emacs 19.34 Xref: jaist-news.jaist fj.unix:8459 あまりのフォローの遅さが議論の妨げになっていたらごめんなさいですが、元 記事のニュースグループが残っているだけまだましというか、うちのスプール にはまだ元記事自身だって残っているので、あまり問題がないような気もしな くもないとか書いているうちにだんだん訳が分からなくなってくるのでそろそ ろ本題に移ることにします。(これじゃ一部にしか通じない…) 記事 <4qbule$ndq@news3.iij.ad.jp> で Kosei Matsuura さんいはく >  UNIX(AIX V4.1.4)のアプリケーションを作っていて問題が > 発生しました。UNIXの書籍を2冊読みましたが、対策法を見つけられませ > んでした。 > >[現在のプログラム仕様] > 親プロセスと子プロセスの2つからなる。 >  この親子プロセス間に、定期通信はない。親は必要に応じて子へコマンドを > 送り、子はそれを待っている。 >  親プロセスの正常終了時には、親プロセスの終了時処理で、子プロセスに終 > 了コマンドを送り、子プロセスも終了させる。なお、子は親からの終了コマン > ドが来ない限り自発的に消滅はしない。 > > [問題点] > 親プロセスが異常終了したときに、子プロセスに終了通知を送る処理を実行 > できない。このため、子プロセスが消滅しないで取り残されてしまう(親プロ > セスIDが1(initプロセス)となった子プロセスが残る)。 > > [知りたいこと] >  子プロセスが取り残される現状を回避する方法。たとえば親プロセスの消滅 > を、子プロセスで知る方法など。 記事 <4qd81f$cuq@masamune.dais.is.tohoku.ac.jp> で kabe@dais.is.tohoku.ac.jp さんいはく > まず本当に終了通知が送れないのかどうか検討して下さい。 : > *) データグラムではなくストリームにして、SIGPIPEをひっかける > (子が極端に多いとこれではだめか) 記事 <6veom3$l6b$1@sranhh.sra.co.jp> で katsu@sra.CO.JP (WATANABE Katsuhiro) さんいはく > 親子間に定期通信がないそうですから、無意味だと思います。 子は、基本的に親からの通信待ちになっているわけですよね。 だとすると、親が死ねば ストリームの EOF が子に伝わりますから、 read(2)/recv*(2) が 0 を返すことで、子は親の終了を判断できます。 親が SIGKILL で殺されても大丈夫ですし、別に親子関係も必要なくて、 ストリームで繋がってさえいれば、任意のプロセスの終了を検出できます。 ソースコードに変更は必要ですが、もともと read(2)/recv*(2) している筈で すから、ごく自然な変更で済むと思います。 # 元記事のプログラムは、それはそれで面白いと思います。 -- soda@sra.co.jp  Software Research Associates, Inc. 曽田哲之 (Soda Noriyuki)