web-dev-qa-db-ja.com

「失われた」セッションのstdoutを取得する方法

状況の名前はよくわかりません。昨日、バックグラウンドのipythonプロセスでセッションを閉じたと思いますが、引き続き接続できます(プロセスはWebサーバーを実行しており、ページをロードできます)。プロセスのstdout/stderrを引き続き表示できますか?

ps -f -Umyname取得します(無関係な行をいくつか削除しましたが、PIDとPPIDは実際のものです):

UID        PID  PPID  C STIME TTY      STAT   TIME CMD
16131     1767  1765  0 11:20 ?        S      0:03 sshd: myname@notty
16131     1946 21019  0 11:25 ?        Sl     1:47 /usr/bin/python -m IPython.kernel -f /home/myname/.ipython/profile_default/security/kernel-c72091
16131     3946 21019  0 14:37 pts/3    Ss+    0:00 /bin/bash
16131     4003  4001  0 14:38 ?        S      0:01 sshd: myname@pts/14
16131     4004  4003  0 14:38 pts/14   Ss     0:00 -bash
16131     6366  4004  0 16:41 pts/14   R+     0:00 ps -f Umyname
16131    21019     1  0 Jul30 ?        Sl     0:52 /usr/bin/python ipython notebook 

画面内で実行されていないと思います。何か案が? PID 21019に興味がある

9
laika

straceを使用して、実行中のプロセスの出力を確認できます。

$ strace -p 21019 -e write=1,2

上記のコマンドは、PID 21019のプロセスにアタッチし、fd 1(stdout)および2(stderr)への書き込み呼び出しをトレースします。

完了したら、sigint(straceへ)を送信して切り離し(押します) ctrlc)。

編集:実行中のプロセスを新しいターミナルにアタッチできるツールもあります。 reptyr 、screenify、retty。これらのほとんどは、strace、gdb、または同様のトレースツールを使用してこれを実現しますが、よりきれいな出力を生成する傾向があることに注意してください。

9
fredrikhl