Поведение сигнала POSIX - PullRequest
       26

Поведение сигнала POSIX

7 голосов
/ 05 августа 2011

Если процесс в настоящее время остановлен из-за сигнала SIGTRAP и ему посылается сигнал SIGSTOP через kill (), каково будет поведение по умолчанию?Будет ли SIGSTOP ожидающим сигналом, который доставляется после того, как процесс снова продолжается?Или он будет просто отброшен / проигнорирован?

Если SIGSTOP ставится в очередь, есть ли способ удалить его из очереди извне этого процесса, например, в процессе трассировки?

Ответы [ 2 ]

3 голосов
/ 06 августа 2011

Из справочной страницы по сигналу (7):

The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.

Простой тест с приложением, остановленным на точке останова и отправкой ему SIGSTOP, показывает, что GDB отображает некоторую информацию, когда я нажимаю «Далее». Сигнал был явно доставлен в приложение. Он не может продолжать отлаживаться, пока я не отправлю ему SIGCONT.

(gdb) next
Program received signal SIGSTOP, Stopped (signal).
fill (arr=0x7fffffffdff0, size=5) at tmp.cpp:28
(gdb) next
Program received signal SIGCONT, Continued.
fill (arr=0x7fffffffdff0, size=5) at tmp.cpp:28
(gdb) next
(gdb) 
0 голосов
/ 08 августа 2011

Что вы имеете в виду «остановлен из-за сигнала SIGTRAP»? SIGTRAP не остановит процесс; по умолчанию он завершается дампом ядра, или вы можете изменить его, чтобы игнорировать сигнал или вызывать обработчик сигнала, но ни в коем случае SIGTRAP не остановит процесс сам по себе. Возможно, процесс отслеживается каким-либо другим процессом (например, отладчиком) с помощью ptrace (2), и в этом случае он останавливается непосредственно перед доставкой SIGTRAP, но в этом случае он находится под контролем ptrace и не будет продолжайте, пока не появится PTRACE_CONT или другое действие ptrace для продолжения процесса.

...