1. ホーム
  2. java

[解決済み] process.waitFor()が返らない

2022-10-22 13:23:41

質問

Process process = Runtime.getRuntime().exec("tasklist");
BufferedReader reader = 
    new BufferedReader(new InputStreamReader(process.getInputStream()));
process.waitFor();

どのように解決するのですか?

多くの理由で waitFor() が返らない理由はたくさんあります。

しかし、通常は実行されたコマンドが終了しないことに帰着します。

これもまた、多くの理由があります。

よくある理由の1つは、プロセスが何らかの出力を生成し、適切なストリームから読み込まないことです。これは、バッファが一杯になるとすぐにプロセスがブロックされ、自分のプロセスが読み取りを続けるのを待つことを意味します。あなたのプロセスは、今度は他のプロセスが終了するのを待ちます(あなたのプロセスを待っているので、終了しませんが・・・)。これは古典的なデッドロックの状況です。

ブロックしないように、プロセスの入力ストリームから継続的に読み取る必要があります。

の落とし穴をすべて説明した素晴らしい記事があります。 Runtime.exec() の落とし穴をすべて説明し、それを回避する方法を示した "Runtime.exec()が実行されない場合" (そう、この記事は2000年のものですが、内容はまだ適用できます!)