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

lai*_*ika 11 linux shell stdout ps

我不知道这种情况的名称是什么,我想昨天我关闭了一个带有后台 ipython 进程的会话,但我仍然能够连接到它(该进程正在运行一个 Web 服务器,我可以加载页面)。我还能看到进程的标准输出/标准错误吗?

如果我运行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 
Run Code Online (Sandbox Code Playgroud)

我确定它没有在屏幕内运行。任何的想法?我对 PID 21019 感兴趣

fre*_*khl 10

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

$ strace -p 21019 -e write=1,2
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • strace 无法在 docker https://github.com/moby/moby/issues/20064 中运行,要关闭安全功能,请使用:`docker run --security-opt seccomp:unconfined ...` (2认同)