2014-12-07 4 views
1

У меня есть приложение (на Java BTW), которое в качестве дочерних процессов запускает сторонние утилиты командной строки. Когда этому приложению дается такой сигнал, как SIGTERM, я замечаю, что этот сигнал также передается всем дочерним процессам.Может ли родительский процесс linux защитить дочерний процесс от сигнала?

Есть много вещей в Интернете, которые я могу найти о том, как обрабатывать сигналы в процессе, но я не могу контролировать, как сторонние инструменты выбирают обрабатывать свои сигналы.

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

ответ

1

Если сигнал уничтожения отправляется всей группе (с использованием системного вызова killpg()), все процессы должны получать его.

Для защиты ребенка ребенку необходимо настроить обработчик сигнала и/или sigprocmask, или вам нужно выполнить опрос ребенка и перехватить доставку сигнала)