Process
オブジェクトをJavaで作成します(プログラムはhtml tidyが重要な場合)。stdin(Process.getOutputStream()
)でデータをフィードしてストリームを閉じます。プロセスが終了しないため、Process.waitFor()
を返すことはありません。 Process.destroy()
に電話することなくこの問題を解決するにはどうすればよいですか?stdinを閉じた後、unixコマンドラインプログラムが終了しない
-3
A
答えて
-3
tidy
は出力を終了する前に出力を消費する可能性があります。これは、プログラムに多くのデータを送り、多くのデータを返すだけの場合に発生します。解決策は、プログラムが終了するのを待つ前に出力を消費することです。これは私がそれ(ない完全なコード)を処理しています方法です:
ProcessBuilder builder = new ProcessBuilder();
//-*snip*-
Process p = null;
Throwable error = null;
int returnCode = -1;
String output = null;
StringBuilder stdErr = new StringBuilder(200);
try{
p = builder.start();
try (Writer w = new BufferedWriter(new OutputStreamWriter(p.
getOutputStream()))){
w.write(html);
}
Process reference = p;
//read both outputs so tidy has no reason to wait
Thread errReader = new Thread(()->{
StringBuilderWriter writer = new StringBuilderWriter(stdErr);
try {
IOUtils.copy(reference.getErrorStream(), writer,
Charsets.UTF_8);
}
catch (IOException ex) {
//nom...
//An IOE that happens here will likely happen when reading
//stdout as well.
}
});
errReader.start();
//tidy might be waiting for us to consume output
output = IOUtils.toString(p.getInputStream());
returnCode = p.waitFor();
errReader.join();
}
+0
あなたは質問を複製するための踏み台として、他人が探している質問を残したいので、回答を削除して返事を返して、それがあなたに与えている否定的な回答をクリアすることができます。 – Andreas
+0
私はできましたが、答えは誰かに役立つかもしれませんし、それほど多くの担当者ではありません。私はむしろ他の人を助けることができます。 –
関連する問題
- 1. macOSアラートが閉じた後にサブプロセスが終了しない
- 2. 終了アプリケーションでバックグラウンドスレッドが閉じない
- 3. C#プログラムが終了した後にコンソールが終了しない
- 4. タスクが終了してもSwingWorkerスレッドが閉じない?
- 5. jp2launcher.exeがアプレットを閉じて終了しない
- 6. がタスクバー終了イベントから正しく閉じていない
- 7. フォームを閉じた後にアプリケーションを終了する
- 8. ソケットを閉じた後にスレッドを終了する
- 9. AppleScriptでウィンドウを閉じた後にアプリケーションを終了する
- 10. ユーザーが終了したいときにbashスクリプトからSTDINを終了する
- 11. チャンネル終了/閉じるでソケットを閉じる/閉じる
- 12. ユーザーがメインウィンドウを閉じたときにPowerPointプロセスが終了しない
- 13. c#で実行が終了した後にsqlcmdを閉じます
- 14. 角4:フォーム送信イベントが終了した後、モーダルを閉じる
- 15. クエリ終了後にdbへの接続が閉じられない
- 16. サーバーを終了するとポートが閉じない
- 17. コマンドプロンプト/パテを閉じずにコマンドプロセスを終了したい
- 18. メインアプリが閉じたときにサービスが終了します
- 19. JavaScriptを終了してウィンドウを閉じない
- 20. NSOutputStreamが終了したときに接続を閉じる
- 21. スレッドが終了したときにフォームを閉じる
- 22. ExoPlayerを使用して終了した後にビデオを閉じる方法
- 23. リクエストがNancyFxアプリケーションで終了した後にDB接続が閉じられない
- 24. 終了イベントハンドラを閉じるアプリケーションを強制終了
- 25. バットファイルを閉じて5分後にプログラムを終了する
- 26. stdoutとstdinファイル記述子を閉じた後で再オープン
- 27. PyQt4 GUI終了後にコンソールを閉じる
- 28. PostgreSQLメソッドの終了後に接続を閉じる
- 29. アニメーションの終了後にのみpopupWindowを閉じる方法
- 30. リモートクライアントが接続を閉じるまでreadLine()ループが終了しない
いいえ、私はちょうど他にこの答えを見つけて、他の人が、私が学んだことの恩恵を受けるかもしれないと思ったことができませんでした。 –
あなたはなぜこれを投票していますか?私は質問を言い換える必要がありますか? –
あなたは本当に同じ回答のUnix版が必要ですか? – Andreas