是否可以使用其 PID 读取任何进程的输出?

Tom*_*mmy 41 command-line process

是否可以通过以类似于将fg命令用于作业的方式使用其 PID 将终端附加到已经运行的进程?

小智 56

您可以获得该进程的标准文件描述符,例如stdout

tail -f /proc/<pid>/fd/1
Run Code Online (Sandbox Code Playgroud)

  • 我用 top 尝试了这个解决方案,但它似乎不起作用。在一个终端中,我启动了 top ,在另一个终端中,我将您的命令与相关的 pid 一起使用,但没有输出。 (9认同)
  • 你如何在 mac 上做到这一点? (2认同)
  • 如果这个描述符指向一个套接字怎么办?尾巴读不懂。`# ls -la /proc/24510/fd/1 lrwx------ 1 root root 64 Oct 31 08:34 /proc/24510/fd/1 -&gt; socket:[444026]` (2认同)

小智 11

这里有几个选项。一种是将命令的输出重定向到一个文件,然后用于tail实时查看添加到该文件的新行。

另一种选择是在 中启动您的程序screen,这是一种基于文本的终端应用程序。屏幕会话可以附加和分离,但名义上仅供同一用户使用,因此如果您想在用户之间共享它们。

否则,如果您希望可以跟踪该过程并查看它在做什么strace

strace -e trace=open -p 22254 -s 80 -o output.txt
Run Code Online (Sandbox Code Playgroud)
  • -p PID: 使用进程 ID PID 附加到进程并开始跟踪。
  • -s SIZE: 指定要打印的最大字符串大小(默认为 32)。
  • -o filename: 将跟踪输出写入文件 filename 而不是屏幕 (stderr)。