我确实知道
strace
使用 ptrace
来完成这项工作,
但需要在
TRACE_ME
开启的情况下运行目标进程,
不适用于已经运行的进程的情况。
它如何在已经运行的进程上工作?
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 页面了解详细信息。
注意:跟踪的进程运行缓慢。
ptrace()
的详细信息是特定于操作系统的。
在 Linux 上,子进程可以通过
ptrace(PTRACE_TRACEME, ...)
请求其父进程跟踪;但是,一个进程也可以通过 ptrace(PTRACE_ATTACH, ...)
将自己附加到另一个进程。
请参阅 Linux
ptrace(2)
手册页(如果您确实想要详细信息,请参阅 strace
源代码,以及从 kernel/ptrace.c
开始的内核源代码)。