如何获取“丢失”会话的标准输出

如何获取“丢失”会话的标准输出

我不知道这种情况叫什么,我记得昨天我关闭了一个与后台 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 感兴趣

答案1

您可以使用它strace来查看正在运行的进程的输出。

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

上述命令将附加到 PID 为 21019 的进程并跟踪对 fd 1 (stdout) 和 2 (stderr) 的写调用。

完成后,您可以发送sigint(到 strace) 来分离 (按ctrl+ c)。

编辑:还有一些工具允许您将正在运行的进程附加到新终端,例如雷普特、screenify、retty。请注意,其中大多数使用 strace、gdb 或类似的跟踪工具来完成此操作,但它们往往会产生更漂亮的输出。

相关内容