mup*_*pro 14 linux multithreading ptrace system-calls linux-kernel
我正在研究一个包含ptrace的linux应用程序来观察另一个进程的线程.当我观察到的应用程序分叉子进程时,这已经很好用了.通过在我的应用程序中调用waitpid,我可以在观察应用程序中获得以下信号:
SIGSTOP
形成子进程SIGTRAP
来自父母为了跟踪所有的孩子我设置ptrace的有PTRACE_O_TRACEFORK
,PTRACE_O_TRACEVFORK
,PTRACE_O_TRACECLONE
和PTRACE_O_TRACEEXIT
.
虽然子进程的一切都运行得很好,但我无法观察应用程序的线程.我SIGTRAP
从创建线程的过程中得到了但我没有从线程获得任何信号.
线程有什么特别之处ptrace
吗?如何strace
跟踪线程(我在代码中找不到任何专用于线程的特殊例程strace
)?
这是我ptrace
在我的应用程序中使用的方式:
ptrace(PTRACE_ATTACH, pid, NULL, NULL);
waitpid()
:trace_pid = waitpid(-1, &status, 0);
ptrace
选项:ptrace(PTRACE_SETOPTIONS, pid, NULL, PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE | PTRACE_O_TRACEEXIT);
附加到pid后,我正在调用waitpid()
循环并调用ptrace(PTRACE_SETOPTIONS...
报告的每个新任务ptrace
.当然,我SIGCONT
在事件处理后继续执行任务.
mup*_*pro 13
最后,我自己找到了解决方案:我通过调用从所有线程获得了信号
waitpid(-1, &status, __WALL)
Run Code Online (Sandbox Code Playgroud)
代替
waitpid(-1, &status, 0)
Run Code Online (Sandbox Code Playgroud)