Определение того, какой сигнал прервал мой системный вызов (Linux) - PullRequest
2 голосов
/ 27 февраля 2010

После того, как мой системный вызов вернулся, поскольку он был прерван сигналом, есть ли способ точно определить, какой тип сигнала (то есть завершение дочернего процесса) вызвал прерывание?

Ответы [ 2 ]

3 голосов
/ 27 февраля 2010

В Linux имеется ряд средств для работы с сигналами:

  • waitpid(2) может использоваться для ожидания в линии для SIGCHLD
  • sigaction(2) может использоваться для настройки функций обработчика для реагирования на конкретные сигналы, здесь флаг SA_RESTART влияет на то, являются ли определенные системные вызовы прерванными или перезапущен
  • sigprocmask(2) может использоваться для блокировки нескольких сигналов
  • sigwait(3) может использоваться для ожидания количества сигналов в линии
  • Последние версии ядра поддерживают signalfd(2), что удобно, когда нужно объединить обработку сигналов и неблокирующий ввод-вывод.

Затем наступает следующий уровень сложности, когда мы начинаем говорить о потоках, хотя, если вы имеете дело с сигналами явно, вам, как правило, все равно , какой сигнал прервал системный вызов.

3 голосов
/ 27 февраля 2010

Вам нужно установить обработчик. Посмотрите здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...