我知道strace
使用ptrace
来完成这项工作,
但是需要在TRACE_ME
开启
不适用于已经运行的流程。
它如何在已经运行的流程上运行?
答案 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
开始)。