strace如何连接到已经运行的进程?

时间:2011-09-20 08:16:05

标签: strace

我知道strace使用ptrace来完成这项工作,

但是需要在TRACE_ME开启

的情况下运行目标流程

不适用于已经运行的流程。

它如何在已经运行的流程上运行?

2 个答案:

答案 0 :(得分:25)

strace -p <PID> ----&gt;将流程附加到 strace 。 “-p”选项适用于流程的 PID

strace -e trace=read,write -p <PID> - &gt;通过这种方式,您还可以跟踪事件的进程/程序,例如读取和写入(在此示例中)。因此,它将打印所有此类事件,包括进程读取和写入系统调用。

其他此类例子

-e trace= network  (Trace all the network related system calls.)

-e trace=signal    (Trace all signal related system calls.)

-e trace=ipc       (Trace all IPC related system calls.)

-e trace=desc      (Trace all file descriptor related system calls.)

-e trace=memory    (Trace all memory mapping related system calls.)

还有更多..

跟踪 是您可以使用 -e 选项的众多选项之一。

Ctrl-C 以strace方式阻止跟踪。

点击strace -h,查看 帮助 部分,了解 strace 的简短摘要 和 man 页面了解详细信息。

注意:跟踪过程运行缓慢。

答案 1 :(得分:13)

ptrace()的详细信息是特定于操作系统的。

在Linux上,孩子可以请求其父母ptrace(PTRACE_TRACEME, ...)跟踪;但是,或者,流程可以使用ptrace(PTRACE_ATTACH, ...)将其自身附加到另一个流程。

请参阅Linux ptrace(2) man page(如果您真的需要详细信息,strace source和内核源代码从kernel/ptrace.c开始)。