我有一个在 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
- 标准误差