GNU/Linux >> Linux の 問題 >  >> Linux

Linuxでプロセスが別のプロセスのstdoutとstderrを傍受するにはどうすればよいですか?

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


Linux
  1. Linuxでゾンビプロセスを見つけて殺す方法

  2. プロセス監視のために Linux に Monit をインストールして構成する方法

  3. どのプロセスが自分のプロセスにシグナルを送信したかをLinuxで確認するにはどうすればよいですか

  1. Linux でファイルとディレクトリのサイズを確認するにはどうすればよいですか?

  2. Linux でプロセスのプロセッサ アフィニティを設定するにはどうすればよいですか?

  3. Linux で UDP トラフィックを生成しているプロセスを特定するにはどうすればよいですか?

  1. Linuxコマンドをバックグラウンドで起動し、ターミナルでプロセスをデタッチする方法

  2. Linuxでファイルのパーミッションと所有権を別のファイルにコピーする方法

  3. Linuxで出力をファイルとStdoutにリダイレクトする方法