私のソフトウェアを説明しましょう。私のソフトウェアが単純に行うことは、10 個のスレッドを作成し、各スレッドに多数のタスクを割り当てることです。次に、各スレッドは、cmd バッチ ファイルを開始するランタイム プロセスを作成します。このプロセスは、デバイス (約 200 個あります) に telnet 接続して構成をポーリングするプログラムを開始します。私のプロセス作成のコードは次のとおりです。
Process p1 = java.lang.Runtime.getRuntime().exec("cmd /c start /b /wait " + batchFile);
int returnVal = p1.waitFor();
batchFile
バッチ ファイルのフル パスです。誤解しないでください。ソフトウェアは実行の 100% まで正常に動作し、約 95% で 1 回だけハングしたので、その解決策を見つけようとしています。なぜハングアップしたかは今の問題ではなく、後でハングアップに対処する方法..!
ここでの問題は、プロセスが完了するのを待つ必要があることです。これは、telnet クライアントがファイルに書き込み、後でスレッドで読み取るためです。したがって、の使用.waitFor()
。私の質問は、外部プログラムがハングしたことをスレッドに理解させるにはどうすればよいですか? 言い換えれば、外部プログラムに終了までの時間制限を与えることはできますか? そうでない場合、スレッドはプロセスを強制終了しますか?
また、エラーと出力ストリームの読み取りについて読みました。しかし、ここでは当てはまらないと思いますか?