すでに実行中のJavaプログラムの出力を取得/傍受することはできますか?実行中のJavaプログラムの出力を傍受する
これは私の状況です。終了するまでに数時間かかるプログラムです。だから私はそれを開始し、コンピュータがそれを仕事にさせる。私はSSHでプログラムを実行しているコンピュータにログインして、psで動作しているのを見ることができますが、コンソールに書き込まれた出力をインターセプトしたいと思います。
これを行う方法はありますか?
追加情報を提供する必要がありますか?
すでに実行中のJavaプログラムの出力を取得/傍受することはできますか?実行中のJavaプログラムの出力を傍受する
これは私の状況です。終了するまでに数時間かかるプログラムです。だから私はそれを開始し、コンピュータがそれを仕事にさせる。私はSSHでプログラムを実行しているコンピュータにログインして、psで動作しているのを見ることができますが、コンソールに書き込まれた出力をインターセプトしたいと思います。
これを行う方法はありますか?
追加情報を提供する必要がありますか?
セッションを開始するには、screen
セッションでセッションを切断し、後でsshして再接続して進行状況を確認します。 ここにいくつかの情報がusing screenです。
別のオプションは、標準出力と標準エラーをファイルにリダイレクトし、内容を表示するためにtail
のようなものを使用することです。例:my_program &> /tmp/output
[OK]をクリックすると、私はあなたが先に考えなければならなかったケースを処理したので、私はちょっと不自然だったことに気付きました。今、touが実行中のプロセスから取得したい場合、gdb
を使用できます。
gdb -p process_id
(gdb) p close(1)
$1 = 0
(gdb) p creat(“/tmp/output″, 0600)
$2 = 1
(gdb) q
これは/tmp/output
への出力を置くと、再び、あなたは対話的にそれを見るためにtail
を使用することができます。
はい、標準の入力ストリーム、出力ストリーム、およびエラーストリームをキャプチャする必要があります。 $ man popen
またはthis SO questionをチェックしてください。
EDIT:既に実行中のプロセスについては、基本的なデバッガをプロセスに接続し、上記のように入力ストリームと出力ストリームを複製できるかどうかを確認してください。
+1はファイルにリダイレクトし、 'tail'を使って表示します。 – Perception
ありがとう、これは動作します!新しいリスナーを「切り離す」ことも可能ですか?また、** root ** userとしてこれを行う必要があることにも気付きたいと思います。 – Henridv
これらのgdbコマンドが何をするのか少し説明できますか?私はすでにこの記事を見つけましたが、各コマンドについては説明していません。[link](http://blog.tridgell.net/?p=4) – Henridv