ホームページ > Java > &#&チュートリアル > Java でプロセス出力を非同期にキャプチャしてリダイレクトする方法

Java でプロセス出力を非同期にキャプチャしてリダイレクトする方法

DDD
リリース: 2024-11-20 02:57:02
オリジナル
1033 人が閲覧しました

How to Capture and Redirect Process Output Asynchronously in Java?

プロセス出力の非同期的なキャプチャとリダイレクト

ProcessBuilder を使用してプロセスを起動するとき、場合によっては、プロセスをブロックせずに stdout および stderr 出力を転送する必要が生じることがあります。メインスレッド。デフォルトでは、プロセス ストリームからの読み取りは呼び出し元をブロックするため、同時実行性を必要とするタスクには適していません。

非同期出力リダイレクトを実現する 1 つの方法は、stdOut ストリームを継続的に監視し、その内容をストリームに書き込むスレッドを手動で作成することです。システムアウト。ただし、このアプローチは煩雑になる可能性があり、追加のスレッド管理が必要になります。

このプロセスを合理化するために、ProcessBuilder は、サブプロセスの標準 I/O ストリームをシームレスに設定する継承 I/O メソッドを提供します。 Javaプロセスを呼び出しています。これにより、サブプロセスによって生成された出力は手動でスレッドを作成することなく、コンソールに直接送信されます。

あるいは、inheritIO をサポートしていない古い Java バージョンの場合は、スレッドを使用したカスタム実装を使用できます。

この実装は、サブプロセスの入力ストリームとエラー ストリームを監視するスレッドを作成し、そのデータを System.out と System.err に転送します。 それぞれ。入力ストリームが最後に達するため、サブプロセスが完了するとスレッドは自動的に終了します。

以上がJava でプロセス出力を非同期にキャプチャしてリダイレクトする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート