10

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

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

4

2 に答える 2

4

これを行うために Linux で ptrace(2) を使用するプログラムrettyが既に存在します。

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

実行中のプログラムが既に tty に接続されている場合は機能しますが、プログラムをバックグラウンドで実行した場合に機能するかどうかはわかりません。

少なくとも、良いヒントが得られるかもしれません。:)

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

gdb を使用してファイル記述子を操作することもできます。

(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/

于 2013-01-06T17:59:52.717 に答える
1

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

私の頭に浮かぶ次のアイデアはstrace -p [pid]ですが、「プリティファイド」出力が得られます。考えられる解決策は、データをどこかptrace(2)にフックして書き込むために使用する小さなプログラムを作成することによって、自分自身を追跡することです。write(2)それは機能しますが、特にCプログラミングに慣れていない場合は、ほんの数秒で完了しません。

残念ながら、私はあなたが望むことを正確に実行するプログラムを考えることができません。それが私があなたにそれを自分で書く方法のヒントを与える理由です。幸運を!

于 2013-01-06T17:56:09.387 に答える