別のプロセスを開始する(Java)プロセスがありますfoo
。 foo
起動して実際に実行するのに数秒かかります。制御権は開始されるとすぐに親プロセスに戻りますが、foo
必ずしも準備されていません。
また、デバッグモードでは、foo
人間が読み取ることができる出力がおよびに書き込まれます。stdout
stderr
私が知っているオプション:
sleep
親プロセスは理論的には以前よりもn
数秒かかります。n
foo
stdout
親プロセスが子プロセスで特別なものを見つけ、stderr
それが見つかるまでブロックします。- 準備ができたら、オペレーティングシステムで一種のフラグファイルをタッチし、親プロセスがファイルを
foo
監視できるようにします。
私はこれらのオプションのどれも本当に気に入りません(1.競争条件があり、2.マジックストリングマッチングに関連する、3.複数のプロセスがfoo
クラッシュする危険性があります)。別の方法(親プロセスから子プロセスへ)にシグナルを送信して通信できますが、子プロセスが自分の状態を親プロセスに渡すより良い方法がわかりません。
答え1
子供たちは両親に信号を送ることができます。SIGUSR1
そしてSIGUSR2
これのために存在するアドホックここでは状況が理想的かもしれません。
アプリケーションは、対応するJavaコードを使用して親プロセスIDを簡単に見つけることができますgetppid()
。あるいは、親プロセスが$$
コマンドラインから独自のPID(PID)をJavaコードが取得できるパラメータとして渡すこともできます。