У меня есть программа супервизора, которая обычно хочет получать SIGCHLD
событий. Однако после получения SIGTERM
или подобного сигнала было бы безопасно и желательно игнорировать события SIGCHLD
, чтобы предотвратить появление зомби. Проблема в том, что я не уверен, разрешено ли вызывать signal(2)
, когда он уже находится внутри обработчика сигнала, так что, например. SIGTERM
звонит signal(SIGCHLD, SIG_IGN)
. похоже, это не вызывает проблем, но я знаю, что есть много ограничений на то, что вы можете делать в обработчике сигнала, и я не могу понять, находится ли вызов signal
в запрещенной зоне. .
Итак: это законно, надежно? Если нет, есть ли альтернативный способ убедиться, что никакие дети, все еще работающие во время SIGTERM
, не смогут зомбировать, даже если они не должным образом wait
включены?