2012-01-07 4 views
2

すでに実行中のJavaプログラムの出力を取得/傍受することはできますか?実行中のJavaプログラムの出力を傍受する

これは私の状況です。終了するまでに数時間かかるプログラムです。だから私はそれを開始し、コンピュータがそれを仕事にさせる。私はSSHでプログラムを実行しているコンピュータにログインして、psで動作しているのを見ることができますが、コンソールに書き込まれた出力をインターセプトしたいと思います。

これを行う方法はありますか?

追加情報を提供する必要がありますか?

答えて

6

セッションを開始するには、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を使用することができます。

+1

+1はファイルにリダイレクトし、 'tail'を使って表示します。 – Perception

+0

ありがとう、これは動作します!新しいリスナーを「切り離す」ことも可能ですか?また、** root ** userとしてこれを行う必要があることにも気付きたいと思います。 – Henridv

+0

これらのgdbコマンドが何をするのか少し説明できますか?私はすでにこの記事を見つけましたが、各コマンドについては説明していません。[link](http://blog.tridgell.net/?p=4) – Henridv

0

はい、標準の入力ストリーム、出力ストリーム、およびエラーストリームをキャプチャする必要があります。 $ man popenまたはthis SO questionをチェックしてください。

EDIT:既に実行中のプロセスについては、基本的なデバッガをプロセスに接続し、上記のように入力ストリームと出力ストリームを複製できるかどうかを確認してください。

関連する問題