【发布时间】:2011-11-20 21:03:15
【问题描述】:
我知道strace 使用ptrace 来完成这项工作,
但它需要在TRACE_ME开启的情况下运行目标进程,
不适用于已运行进程的情况。
它如何在已经运行的进程上工作?
【问题讨论】:
标签: strace
我知道strace 使用ptrace 来完成这项工作,
但它需要在TRACE_ME开启的情况下运行目标进程,
不适用于已运行进程的情况。
它如何在已经运行的进程上工作?
【问题讨论】:
标签: strace
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) man page(如果您真的想要详细信息,请参阅strace source,以及从kernel/ptrace.c 开始的内核源代码)。
【讨论】: