使用 ptrace 时阻止信号传播到下层

Block signal from propagating to the inferior when using ptrace

我已经放置了一个简单的陷阱指令来模拟下层的断点,但是当到达该指令时,我得到的是 CLD_KILLED 而不是 CLD_SIGTRAP,如下所示。

--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_KILLED, si_pid=12668, si_uid=10157, si_status=SIGTRAP,si_utime=2692,si_stime=875}

看来gdb可以通过命令"handle SIGSTOP nopass".

来防止SIGTRAP杀死劣等的

我如何用 C 实现?

谢谢

根据手册页, https://www.freebsd.org/cgi/man.cgi?query=siginfo&sektion=3&apropos=0&manpath=FreeBSD+7.1-RELEASE

 SIGCHLD
si_pid       child process ID
si_status    exit value or signal; if si_code is equal to
             CLD_EXITED, then it is equal to the exit
             value of the child process, otherwise, it is
             equal to a signal that caused the child
             process to change state.

在你的情况下 si_code=CLD_KILLED 所以子句 si_status [...] 等于导致 child 改变状态的信号。

因此 si_status=SIGTRAP 就是您要查找的信息。

如果你有 ptrace 你的 child 你会得到一个 SIGTRAP