2016-06-20 3 views
-1

管理モードでWindowsサーバ上のPowershellからいくつかのスレッドでJavaプロセスを実行しています。Windows PowershellからJavaプロセスを実行するとCtrl + Cを押すまでランダムに停止する

Ctrl + Cを押すまでランダムにフリーズすることがあります。

誰もがこの問題を遭遇し、どこを見ているかを指摘していますか?

+0

私は、シェルがフリーズから回復する代わりにCtrl + Cを押してプロセスを終了すると予想しているので、これは一般的な既知の問題かもしれないと考えました。その行動がどのように可能であるかについての説明は、私が取り返して問題を探すのに十分であろう。 – Chry007

答えて

1

Runtime.exec(..)でプロセスを開始する場合、Process.getInputStream()respからバイトを読み取る必要があることがあります。 Process.getErrorStream()、それ以外の場合は、特定のバッファサイズよりもstd-out(またはstd-​​err)を多く書き込もうとしたときにプロセスブロックされます。 シェルスクリプトを起動するときにこの問題が頻繁に発生しました。 バックグラウンドスレッドを作成して、これらのストリームから定期的に読み取ることができます。

さらに簡単に、ProcessBuilderクラスを使用してシェルプロセスを開始し、 "inheritIO()"メソッドを使用できます。

+0

あなたの答えをありがとう。 'java -jar process.jar'パイプでプロセスを開始しないと、すべての出力がコンソールに出力されますか?ストリームは常に空でなければならないのですか? – Chry007

+0

O、申し訳ありません。私の答えは、Javaプロセスからシェルを起動するというケースです。あなたはそれを逆にしました。ただし、シェルの起動方法やシェル出力の場所に応じて同様の問題が発生する可能性があります。 –

関連する問題