- ベストアンサー
fork()で作られた子プロセスから親プロセスの生存を知る方法は?
タイトルの通りなのですが、プロセスAから fork()で子プロセスBを作り、Bには無限ループで処理をさせます。 Aはユーザからの入力を受け、処理を行います。 Aが終了要求をされプロセスを終了するときに、 Bも同時に終了したいのですが、BからAの生存を判定して Aのプロセスが切れていたBも終了する、ということは可能でしょうか? Bの無限ループ処理では、ファイルの書き換えを行っているので AからBのPIDを指定してKillする、ということはせずに B自身で判定して終了するようにしたいのですが。。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>その場合、子プロセスはゾンビプロセスとなってしまいますか? なりません。initは、子プロセスが終了すると、waitを呼び出して、子プロセスが、ゾンビになることを防止します。
その他の回答 (1)
- tatsu99
- ベストアンサー率52% (391/751)
回答No.1
getppid()を呼び出して下さい。 当該プロセスの親プロセスのプロセスIDが返ります。 戻り値が1の時、親プロセスは存在しません。 プロセスID=1は、initプロセス(デーモン)であり 、これは、親プロセスが消滅したために、親プロセスに成り代わって、initが、親プロセスの肩代わりをしていることを示しています。
質問者
補足
ありがとうございます。 なるほど。getppid()の戻り値が1なら生存判定が できるのですね。 その場合、子プロセスはゾンビプロセスとなってしまいますか?
お礼
大変よくわかりました! どうもありがとうございました。