Path: sran265!katsu From: katsu@sran14.sra.co.jp (Katsuhiro Watanabe) Message-ID: Date: 29 Nov 91 15:52:31 Organization: Software Research Associates, Inc.,Japan In-reply-to: ura@lettuce.pa.Yokogawa.CO.JP's message of 26 Nov 91 03:32:13 GMT Newsgroups: fj.questions.unix,fj.unix Subject: Re: Kill child process, when parent process died. Followup-To: fj.unix Distribution: fj References: (Followup-To: に注意) 記事 で ura@lettuce.pa.Yokogawa.CO.JP (Naoki Ura) さんいはく > 何らかの原因で親プロセスが死んでし > まった時に、子プロセスたちも一緒に死ぬようにする方法 に関して、浦さん自身から 記事 で > 何人かの人から、メイルでフォローを頂いたのですが、 > > 祖母プロセスを設定して、親はプロセスグループリーダになって、孫たちを産 > む。孫たちは、このプロセスグループに属す。 > 一方、祖母プロセスは親の死をwait で、みとり、死を確認したら、プロセス > グループに対して、SIGTERM を送る。 というフォローが出ていますが、祖母プロセスが親プロセスと同じく 「何らかの原因で」死ぬ場合のことは考えなくてもいいのですか?  ところで話はかわって、再び 記事 で > このようなことを行なうために、親プロセスが死んだ時に、自動的にSIGHUPが > 子プロセスに送られるようにする仕組みがあるようです。 > > これは、あるプロセスが、 > > ・プロセス・グループ・リーダであった。 > ・制御端末との関連を確立していた。 > > ような状態で、そのプロセスが、シグナルまたは exit()でターミネートする > と、そのプロセス・グループに属するプロセスにシグナルが送られるような仕 > 組みのようです。 > (ログインシェルがこの機能を使っているようですね)  これは system V での話だと思います。4.3BSD では微妙に違っています。  man 2 exit によれば、プロセスが終了する時、子プロセスのうちで 停止しているものに SIGHUP が送られるとあります。(実際は SIGCONT も) つまり、SIGHUP の送り先はプロセスグループや制御端末とは無関係です。 この仕様により、csh などのジョブコントロール付のシェルが死んだ時でも、 停止していたジョブ(当然親のシェルとはプロセスグループが異なる)が 死ねることになります。 -- ----____----____ 渡邊克宏 SRAソフトウェア工学研究所