• ベストアンサー

fork()で作られた子プロセスから親プロセスの生存を知る方法は?

タイトルの通りなのですが、プロセスAから fork()で子プロセスBを作り、Bには無限ループで処理をさせます。 Aはユーザからの入力を受け、処理を行います。 Aが終了要求をされプロセスを終了するときに、 Bも同時に終了したいのですが、BからAの生存を判定して Aのプロセスが切れていたBも終了する、ということは可能でしょうか? Bの無限ループ処理では、ファイルの書き換えを行っているので AからBのPIDを指定してKillする、ということはせずに B自身で判定して終了するようにしたいのですが。。

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

>その場合、子プロセスはゾンビプロセスとなってしまいますか? なりません。initは、子プロセスが終了すると、waitを呼び出して、子プロセスが、ゾンビになることを防止します。

ponshige
質問者

お礼

大変よくわかりました! どうもありがとうございました。

その他の回答 (1)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

getppid()を呼び出して下さい。 当該プロセスの親プロセスのプロセスIDが返ります。 戻り値が1の時、親プロセスは存在しません。 プロセスID=1は、initプロセス(デーモン)であり 、これは、親プロセスが消滅したために、親プロセスに成り代わって、initが、親プロセスの肩代わりをしていることを示しています。

ponshige
質問者

補足

ありがとうございます。 なるほど。getppid()の戻り値が1なら生存判定が できるのですね。 その場合、子プロセスはゾンビプロセスとなってしまいますか?

関連するQ&A