使用 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
。
我已经放置了一个简单的陷阱指令来模拟下层的断点,但是当到达该指令时,我得到的是 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
。