【发布时间】:2014-08-01 04:18:34
【问题描述】:
尝试使用ptrace() 系统调用,我正在尝试跟踪同一进程的另一个线程。根据手册页,跟踪器和跟踪器都是特定线程(不是进程),所以我看不出它不应该工作的原因。到目前为止,我已经尝试了以下方法:
- 使用
PTRACE_TRACEME来自clone()d子级:调用成功,但没有做我想做的事,可能是因为要跟踪的线程的父级不是调用clone()的线程 - 使用父线程中的
PTRACE_ATTACH或PTRACE_SEIZE:这总是以EPERM失败,即使进程以root 身份运行并使用prctl(PR_SET_DUMPABLE, 1)
在所有情况下,waitpid(-1, &status, __WALL) 都会失败并返回 ECHILD(显式传递子 pid 时也是如此)。
我应该怎么做才能让它工作?
如果根本不可能,是因为设计或内核中的错误(我使用的是 3.8.0 版本)。在前一种情况下,您能否指出文档的正确位置?
【问题讨论】:
-
这个LKML线程可能是相关的:yarchive.net/comp/linux/ptrace_self_attach.html
标签: multithreading ptrace