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

ney*_*rec 26 command-line debugging process

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

但是,错误会意外发生,然后我只需要从终端监视有错误的应用程序(以查看其输出)。

然后我可以从终端选择一个不是使用终端启动的应用程序吗?如果是这样怎么办?

Mic*_*jer 30

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

查看标准输出:

cat /proc/{pid of process}/fd/1
Run Code Online (Sandbox Code Playgroud)

查看标准错误:

cat /proc/{pid of process}/fd/2
Run Code Online (Sandbox Code Playgroud)


arr*_*nge 9

或者你可以strace像这样使用

sudo strace -p $pid_of_the_process
Run Code Online (Sandbox Code Playgroud)


enz*_*tib 6

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

语法是

gdb program pid
Run Code Online (Sandbox Code Playgroud)

好的,如果调试信息被剥离,您将看不到源代码,这是已部署应用程序的默认设置。但是您可能会看到 stdout/stderr 和调试器消息、段错误。


小智 5

您可能正在寻找retty. 您还可以查找“附加 tty”。基本上它是使用完成的,ptrace所以你甚至可以推出自己的。