从正在运行的进程获取输出

从正在运行的进程获取输出

我有一个在 Linux 机器上运行的进程,我想从中访问输出。它位于我docker exec用来放入的自己的容器中su。我ps可以看到:

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 18:45 ?        00:00:00 python ./manage.py runserver

我想我可以这样做

fg 1

但这没有用。如何捕获这个已经运行的进程的输出?

答案1

使用docker logs <yourcontainer>在主机上读取其标准输出。添加--follow以保持输出。

答案2

您只能fg在当前终端上运行并暂停(例如使用Ctrl+ Z)和/或发送到后台运行(例如使用bg)的作业(或进程)。 PID 1 的可能性极小当前终端;它通常将其标准输入、输出和错误流绑定到/dev/null.您可以检查:

$ sudo ls -l /proc/1/fd/{0,1,2}
lrwx------ 1 root root 64 Mar 28 15:13 /proc/1/fd/0 -> /dev/null
lrwx------ 1 root root 64 Mar 28 15:13 /proc/1/fd/1 -> /dev/null
lrwx------ 1 root root 64 Mar 28 15:13 /proc/1/fd/2 -> /dev/null

您只能检查您拥有的进程的文件描述符,这就是sudo这里需要的原因。对于任何进程,这些描述符的作用如下:

  • fd/0- 标准输入
  • fd/1- 标准输出
  • fd/2- 标准误差

相关内容