可以从终端选择正在运行的应用程序吗?

可以从终端选择正在运行的应用程序吗?

有时我需要从终端运行应用程序进行调试。如果我确定错误会在启动应用程序后不久发生,我可以从终端运行此应用程序。

然而,错误总是出乎意料地发生,这时我只需要从终端监视有缺陷的应用程序(查看其输出)。

那么我可以从终端中选择一个未使用终端启动的应用程序吗?如果可以,该怎么做?

答案1

Linux 中的每个进程都有一个特殊目录/proc/{pid}/fd/。0 是 stdin,1 是 stdout,2 是 stderr。因此,假设您只对诊断输出感兴趣,您可以确定进程 pid,然后在终端中执行以下操作:

查看标准输出:

cat /proc/{pid of process}/fd/1

查看 stderr:

cat /proc/{pid of process}/fd/2

答案2

或者你可以使用strace像这样

sudo strace -p $pid_of_the_process

答案3

您可以附加gdb到正在运行的进程。

语法是

gdb program pid

好的,如果删除了调试信息(这是已部署应用程序的默认设置),您将无法看到源代码。但您可能可以看到 stdout/stderr 和调试器消息、段错误。

答案4

您可能正在寻找retty。您也可以查找“attach tty”。基本上它已经完成了,ptrace因此您甚至可以自己动手。

相关内容