小编mup*_*pro的帖子

ptrace和线程

我正在研究一个包含ptrace的linux应用程序来观察另一个进程的线程.当我观察到的应用程序分叉子进程时,这已经很好用了.通过在我的应用程序中调用waitpid,我可以在观察应用程序中获得以下信号:

  • SIGSTOP 形成子进程
  • SIGTRAP 来自父母

为了跟踪所有的孩子我设置ptrace的有PTRACE_O_TRACEFORK,PTRACE_O_TRACEVFORK,PTRACE_O_TRACECLONEPTRACE_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在事件处理后继续执行任务.

linux multithreading ptrace system-calls linux-kernel

14
推荐指数
1
解决办法
3811
查看次数