gpt4 book ai didi

linux - ptrace 和线程

转载 作者:IT王子 更新时间:2023-10-29 00:25:38 25 4
gpt4 key购买 nike

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

  • SIGSTOP形成子进程
  • SIGTRAP来自 parent

为了跟踪所有 child ,我使用 PTRACE_O_TRACEFORK 设置了 ptrace , 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 继续任务事件处理后。

最佳答案

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

waitpid(-1, &status, __WALL)

而不是

waitpid(-1, &status, 0)

关于linux - ptrace 和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7290018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com