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

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

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

答案1

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

tail -f /proc/<pid>/fd/1

答案2

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

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

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

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

答案3

您可以使用下面给出的命令在另一个终端上附加正在运行的进程:

  • retty(手册页:雷蒂
  • reptyr
  • screen

例子:

screen -S PID
retty $(pgrep PID)
reptyr PID

相关内容