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

问题描述 投票:0回答:2

我确实知道

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

但需要在

TRACE_ME
开启的情况下运行目标进程,

不适用于已经运行的进程的情况。

它如何在已经运行的进程上工作?

trace strace attach-to-process
2个回答
56
投票

strace -p <PID>
----> 将进程附加到strace。 “-p”选项用于进程的 PID

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

其他这样的例子

-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.)

还有更多..

trace 是您可以与 -e 选项一起使用的众多选项之一。

Ctrl-C 中止 strace 的跟踪。

输入 strace -h,查看 帮助 部分,了解有关

strace
的简要摘要 和 man 页面了解详细信息。

注意:跟踪的进程运行缓慢。


38
投票

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

在 Linux 上,子进程可以通过

ptrace(PTRACE_TRACEME, ...)
请求其父进程跟踪;但是,一个进程也可以通过
ptrace(PTRACE_ATTACH, ...)
将自己附加到另一个进程。

请参阅 Linux

ptrace(2)
手册页(如果您确实想要详细信息,请参阅
strace
源代码
,以及从
kernel/ptrace.c
开始的内核源代码)。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.