Jauco の回答を編集することは許可されていないため、私にとって有効な完全な回答を提供します (Russell のページは、STDOUT のファイル記述子 1 を閉じると、次の creat
呼び出しは FD 1 を開きます。
したがって、次のような単純なエンドレス スクリプトを実行します。
import time
while True:
print 'test'
time.sleep(1)
test.py に保存して実行
$ python test.py
PID を取得します:
$ ps auxw | grep test.py
ここで、gdb
を添付します :
$ gdb -p (pid)
fd
を実行します 魔法:
(gdb) call creat("/tmp/stdout", 0600)
$1 = 3
(gdb) call dup2(3, 1)
$2 = 1
tail /tmp/stdout
できるようになりました STDOUT に出力されていた出力を確認してください。
「gdb メソッド」をまとめていくつかの追加機能を追加する新しいユーティリティがいくつかあります。私が今使っているのは「reptyr」(「Re-PTY-er」)と呼ばれるものです。 STDERR/STDOUT を取得するだけでなく、プロセスの制御端末を実際に変更します (以前に端末に接続されていなかった場合でも)。
これの最適な使用法は、screen セッションを開始し、それを使用して実行中のプロセスを screen 内の端末に再接続し、安全に切り離して後で戻ってくることができるようにすることです。
一般的なディストリビューションにパッケージ化されています (例:'apt-get install reptyr')。
http://onethingwell.org/post/2924103615/reptyr