Блокировать распространение сигнала на нижний уровень при использовании ptrace - PullRequest
0 голосов
/ 26 апреля 2018

Я поместил простую инструкцию ловушки для имитации точки останова на подчиненном, но когда эта инструкция была достигнута, я получил 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 может предотвратить SIGTRAP, чтобы убить подчиненную команду, используя "младший", используяобрабатывать SIGSTOP nopass ".

Как я могу сделать это в C?

Спасибо

1 Ответ

0 голосов
/ 27 апреля 2018

Согласно справочной странице, 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 [...] равен сигналу, который вызвал ребенкачтобы изменить состояние.

Таким образом si_status=SIGTRAP - это информация, которую вы ищете.

Если бы у вас был ptrace ваш ребенок, вы бы получили SIGTRAP вместо этого.

...