ここにはもっと簡単な解決策があると思います。 /proc
の下でアクセス可能な疑似ファイルシステムの下で、探している PID に対応する名前のディレクトリを探すだけです。 道。したがって、ID が 1199 のプログラムを実行している場合、cd
その中に:
$ cd /proc/1199
次に、fd
を探します 下のディレクトリ
$ cd fd
この fd
ディレクトリには、プログラムが使用しているファイル記述子オブジェクト (0:stdin、1:stdout、2:stderr) と tail -f
のみが保持されます 必要なもの - この場合は stdout):
$ tail -f 1
これとまったく同じことを探していたところ、次のことができることがわかりました:
strace -ewrite -p $PID
まさにあなたが必要としていたものではありませんが、かなり近いものです。
出力のリダイレクトを試みましたが、うまくいきませんでした。プロセスがソケットに書き込んでいたためかもしれませんが、わかりません.
私にとって、これはうまくいきました:
<オール>
プロセスの所有者としてログインします (root
でも) 許可が拒否されます)
~$ su - process_owner
他の多くの回答で述べられているように、ファイル記述子を末尾にします。
~$ tail -f /proc/<process-id>/fd/1 # (0: stdin, 1: stdout, 2: stderr)
ここにはいくつかのオプションがあります。 1 つは、コマンドの出力をファイルにリダイレクトし、「tail」を使用してそのファイルに追加された新しい行をリアルタイムで表示することです。
別のオプションは、一種のテキストベースの端末アプリケーションである「画面」内でプログラムを起動することです。画面セッションはアタッチおよびデタッチできますが、名目上は同じユーザーのみが使用することを意図しているため、ユーザー間で共有したい場合は、お尻の大きな痛みです.