有人在维基百科上写了一篇文章"ptrace",声称在Linux上,一个ptraced进程本身无法启动另一个进程.我试图确定是否(以及如果是这样的原因)就是这种情况.下面是一个我试图测试的简单程序.我的程序失败(子子进程无法正常运行)但我确信这是我的错误,而不是基本的东西.
在本质上是初始过程甲叉过程乙这反过来叉Ç.一个 ptraces其子乙,乙 ptraces其子Ç.一旦完成设置后,所有三个过程被写入只是打印A,B或C到标准输出每秒一次.
在实践中发生的事情是A和B工作正常,但C只打印一次然后卡住.检查ps -eo pid,cmd,wchan显示C卡在内核函数中,ptrace_stop而其余的都在hrtimer_nanosleep我希望所有三个都在的位置.
偶尔三个都可以工作(所以程序打印Cs以及As和Bs),这让我相信初始设置中存在一些竞争条件.
我猜测可能出现的问题是:
SIGCHLD相关的B看到SIGCHLD一个信号,做ç,并等待(2)报告既从未来乙(但PTRACE_CONT的双方的PID哈克调用不解决的事情)?谁能弄清楚我做错了什么?谢谢.
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include …Run Code Online (Sandbox Code Playgroud)