小编Fin*_*ter的帖子

在ptraced Linux进程中调用ptrace

有人在维基百科上写了一篇文章"ptrace",声称在Linux上,一个ptraced进程本身无法启动另一个进程.我试图确定是否(以及如果是这样的原因)就是这种情况.下面是一个我试图测试的简单程序.我的程序失败(子子进程无法正常运行)但我确信这是我的错误,而不是基本的东西.

在本质上是初始过程叉过程这反过来叉Ç.一个 ptraces其子, ptraces其子Ç.一旦完成设置后,所有三个过程被写入只是打印A,BC到标准输出每秒一次.

在实践中发生的事情是AB工作正常,但C只打印一次然后卡住.检查ps -eo pid,cmd,wchan显示C卡在内核函数中,ptrace_stop而其余的都在hrtimer_nanosleep我希望所有三个都在的位置.

偶尔三个都可以工作(所以程序打印Cs以及As和Bs),这让我相信初始设置中存在一些竞争条件.

猜测可能出现的问题是:

  • 事与做一个看到SIGCHLD相关的B看到SIGCHLD一个信号,做ç,并等待(2)报告既从未来(但PTRACE_CONT的双方的PID哈克调用不解决的事情)?
  • C应该被B跟踪- 而C继承了A的ptrace (B的调用ptrace既没有错也没有覆盖它)?

谁能弄清楚我做错了什么?谢谢.

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include …
Run Code Online (Sandbox Code Playgroud)

c linux ptrace

6
推荐指数
1
解决办法
1657
查看次数

标签 统计

c ×1

linux ×1

ptrace ×1