Управление обработкой сигналов для демонов, которые fork () - PullRequest
2 голосов
/ 22 декабря 2009

Я хочу написать надежный демон на Perl, который будет работать в Linux и следую шаблону, описанному в этом превосходном ответе . Однако в моей ситуации есть несколько отличий: во-первых, я использую Parallel :: ForkManager start() and next; для форка на событие, за которым сразу следует exec('handle_event.pl')

В такой ситуации у меня возникают следующие вопросы:

  1. Где я должен определить свои обработчики сигналов. Должен ли я определить их в родителе (демоне) и предположить, что они будут наследоваться у детей?
  2. Если я выполню exec('handle_event.pl'), получат ли обработчики наследование через exec (я знаю, что они наследуются через fork)?
  3. Если я переопределю новый обработчик сигнала в handle_event.pl, переопределит ли это определение определение, определенное в родительском элементе?
  4. Каковы лучшие практики в такой ситуации?

Спасибо

Ответы [ 2 ]

5 голосов
/ 22 декабря 2009

При ветвлении дочерний процесс имеет те же обработчики сигналов, что и родительский. Когда вы выполняете, любые игнорируемые сигналы остаются игнорируемыми; все обработанные сигналы сбрасываются обратно в обработчик по умолчанию.

4 голосов
/ 22 декабря 2009

exec заменяет весь код процесса кодом, который будет выполнен. Так как обработчики сигналов представляют собой код в образе процесса, они не могут быть унаследованы через exec, поэтому exec вернет расположение обработанных сигналов для обработанных сигналов в их состояния по умолчанию (игнорируемые сигналы будут игнорироваться). Поэтому вам нужно будет установить любую обработку сигналов в процессе exec ed при запуске.

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