我不知道这种情况叫什么,我记得昨天我关闭了一个与后台 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 或类似的跟踪工具来完成此操作,但它们往往会产生更漂亮的输出。