Отправка SIGSTOP дочернему процессу останавливает все выполнение. С - PullRequest
4 голосов
/ 03 октября 2010

Когда я вызываю kill(Child_PID, SIGSTOP); от родителя, я ожидаю, что ребенок остановит выполнение, а родитель продолжит.Это ожидаемое поведение или я должен явно объявить обработчик SIGSTOP в дочернем элементе?Я искал везде и не смог найти эту информацию.

Спасибо.Брейден

Ответы [ 3 ]

2 голосов
/ 03 октября 2010

POSIX говорит:

Система не должна позволять процессу перехватывать сигналы SIGKILL и SIGSTOP.

Итак, у ребенка нет другого выбора, кроме как остановиться - если сигнал отправлен успешно. И вы не можете установить обработчик SIGSTOP в дочернем (или родительском, или любом другом) процессе.

2 голосов
/ 03 октября 2010

Это ожидаемое поведение. Цитирование со страницы руководства unix:

Сигналы SIGKILL и SIGSTOP не могут быть перехвачены, заблокированы или проигнорированы.

И страница руководства BSD упоминает, что:

Функция signal () не будет выполнена, и никаких действий не произойдет. если происходит одно из следующих действий:

[EINVAL]           The sig argument is not a valid signal number.
[EINVAL]           An attempt is made to ignore or supply a handler
                   for SIGKILL or SIGSTOP.

В заключение, вам не разрешено устанавливать обработчик для SIGSTOP. И процесс будет оставаться в приостановленном состоянии, пока не получит SIGCONT.

1 голос
/ 03 октября 2010

Это ожидаемое поведение.

Используйте strace your_program, чтобы увидеть, что происходит.

...