2

さて、私はこのプログラムを書いています。このプログラムは、基本的に他の Java プログラムをバッチで実行します (複数回、さまざまなパラメーター、並列実行など)。

これまでのところ、実行部分はうまく機能しています。ProcessBuilder の .start() メソッド (Runtime.exec() と同等) を使用すると、別の Java プロセスが作成され、終了します。

問題は、これらのプロセスが開始されたら、これらのプロセスを一時停止/停止できるようにしたいということです。単純なスレッドを使用すると、これは一般的に簡単に実行できますが、少なくとも外部の観点からは、外部プロセスには待機/スリープのための機能が組み込まれていないようです。

私の質問はこれです: java.lang.Process オブジェクトを一時停止する方法はありますか? そうでない場合、この機能を含む関連する実行ライブラリを知っている人はいますか? そのすべてを除けば、Process を拡張することはより実行可能な代替手段でしょうか?

4

3 に答える 3

3

私の質問はこれです: java.lang.Process オブジェクトを一時停止する方法はありますか?

お気づきかもしれませんが、標準 API ではこれがサポートされていません。Processたとえば、suspend()/resume()メソッドは提供されません。

そうでない場合、この機能を含む関連する実行ライブラリを知っている人はいますか?

GNU/Linux や Mac OS などの POSIX 準拠のオペレーティング システムでは、別のシステム コール (Runtime.execまたはProcessBuilderネイティブに実装されたライブラリを使用) を使用してkillコマンドを発行できます。

このコマンドを使用すると、(プロセスを一時停止する) や(プロセスを再開する)killなどのシグナルを送信できます。SIGSTOPSIGCONT

(外部プログラムのプロセスIDを取得する必要があります。これに関する質問回答がたくさんあります。)

于 2011-06-01T20:50:11.997 に答える
2

プロセス間でメッセージを送信するためのシステムを作成する必要があります。次の方法でこれを行うことができます。

  1. OS に応じて、シグナルを送信します。(aioobe が指摘するように。)
  2. 1 つのプロセスで、別のプロセスが作成/削除できるファイルの有無をときどきチェックするようにします。(ファイルが読み書きされている場合は、ファイルのロックを使用する必要があります。)
  3. 「メイン」プロセスにポートをリッスンさせ、子プロセスを起動するときに、起動時に「家に電話」する方法を (コマンドライン引数を介して) 伝えます。どちらのプログラムも、作業の実行と処理メッセージのチェックを交互に行います。

あなたが説明したこと (複雑なバッチ環境でのすべての Java プログラム) から、#3 の TCP/IP 通信をお勧めします。

確かに余分な作業が必要ですが、異なるプロセス間で必要なコマンドや情報を送信する柔軟性も得られます。

于 2011-06-01T20:57:16.407 に答える
0

Process は、マシン上で実行されている個別のプロセスを表します。Java では、java.lang.Process を介してそれらを一時停止することは絶対に許可されていません。Process.destroy()を使用して強制的に停止できます。一時停止するには、生成されたプロセスの協力が必要になります。

これらはどのようなプロセスですか?それらを書きましたか?

于 2011-06-01T20:49:41.290 に答える