ptrace(PTRACE_TRACEME)会破坏父子同步

时间:2017-10-15 15:20:54

标签: process ptrace

pit_t pid = fork();
if (pid == -1){
  abort();
} else if (pid == 0){
  printf("this is child before\n");
  ptrace(PTRACE_TRACEME);
  raise(SIGSTOP);
  printf("this is child after\n");
} else {
  //waitpid(pid, NULL, WUNTRACED) for without ptrace
  waitpid(pid, NULL, 0);     
  printf("this is parent\n");
}

没有ptrace行,此代码按预期工作,子节点中的第二个printf永远不会被打印,因为父节点不发送SIGCONT。但是使用ptrace线,孩子的第二个printf会被打印出来。为什么孩子在没有收到SIGCONT的情况下继续执行?

由于

0 个答案:

没有答案