首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ptrace和线程

ptrace和线程
EN

Stack Overflow用户
提问于 2011-09-02 23:03:20
回答 1查看 4.8K关注 0票数 16

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

  • SIGSTOP从父

中形成子process

  • SIGTRAP

为了跟踪所有的孩子,我用PTRACE_O_TRACEFORKPTRACE_O_TRACEVFORKPTRACE_O_TRACECLONEPTRACE_O_TRACEEXIT建立了跟踪。

虽然所有的子进程都运行得很好,但我无法观察应用程序的线程。我从创建线程的进程中获得SIGTRAP,但没有从线程获得任何信号。

线程和ptrace有什么特别之处吗?strace如何跟踪线程(我在strace代码中找不到任何专门用于线程的特殊例程)?

以下是我如何在我的应用程序中使用ptrace

首先我附加到一个进程:ptrace(PTRACE_ATTACH, pid, NULL, NULL);

  • Then,,我调用waitpid()trace_pid = waitpid(-1, &status, 0);

  • Set ptrace options:ptrace(PTRACE_SETOPTIONS, pid, NULL, PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE | PTRACE_O_TRACEEXIT);

在附加到pid之后,我在循环中调用waitpid(),并为ptrace报告的每一个新任务调用ptrace(PTRACE_SETOPTIONS...。当然,在事件处理之后,我继续使用SIGCONT执行任务。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-03 13:54:09

最后,我自己找到了解决方案:我通过调用从所有线程获得信号

代码语言:javascript
复制
waitpid(-1, &status, __WALL)

而不是

代码语言:javascript
复制
waitpid(-1, &status, 0)
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7290018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档