2013-01-06 15 views
10

バックグラウンドで実行されているプロセス(shスクリプト)があり、このプロセスの出力を中断することなく表示できるかどうかは疑問です。Linuxですでに実行中のプロセスの出力を表示

このプロセスはいくつかのアプリケーションによって実行されました。それ以外の場合は、後で表示するために画面に貼り付けていました。終了するのに1時間かかることがあり、エラーなしで正常に実行されていることを確認したい。

+2

です:

また、GDBを使用してファイル記述子を操作することができますか?プレーンテキストですか?もしそうなら、あなたは単に "tail -f "を使うことができます。末尾にはファイルの最後が、-fフラグにはファイルの "後"に指示されます。 tailコマンドには、行数を指定するオプションと、ファイルのポーリング間隔を指定する方法があります。 – Mike

+0

問題は、私がこのプロセスを開始しなかったのは、プロバイダが起動したアプリケーション(cpanelインストーラ)によって起動されたもので、出力を他のファイルにリダイレクトしていないということでした。そこに出力を表示する方法はありますか? –

答えて

4

http://pasky.or.cz/dev/retty/

は、実行中のプログラムがすでにttyに接続されている場合、それは動作しますが、私はしないでくださいあなたがバックグラウンドであなたのプログラムを走らせるなら、それがうまくいくかどうかを知る。

少なくとも、それは良いヒントを与えるかもしれません。 :)

ptrace(2)を使用してプログラムから終了コードを取得することもできます。それ以外の場合は、gdb -p <pid>を使用してプロセスにアタッチするだけで、プログラムが終了すると印刷されます。それは、出力のどのような種類

(gdb) p close(1) 
$1 = 0 
(gdb) p creat("/tmp/stdout", 0600) 
$2 = 1 

http://etbe.coker.com.au/2008/02/27/redirecting-output-from-a-running-process/

1

/proc/[pid]/fd/[012]トリプルに接続しようとする可能性がありますが、うまくいかない可能性があります。

私の心に浮かぶ次のアイデアはstrace -p [pid]ですが、あなたは "prittified"出力を得ます。可能な解決策は、ptrace(2)を使用して小さなプログラムを作成してwrite(2)にフックし、どこかの場所にデータを書き込むことで自分自身をひかれることです。 で動作しますが、特にCプログラミングに慣れていない場合は数秒で完了しません。

残念ながら、私はあなたが欲しいものを正確に行うプログラムを考えることができません。なぜなら、あなた自身で書く方法のヒントを与える理由です。がんばろう!これを行うには、Linuxでのptrace(2)を使用するプログラムは、retty、すでに存在し

関連する問題