Обработчики сигналов наследуются при запуске подпроцесса, поэтому, если вы используете сигнальный модуль для игнорирования SIGINT (signal.signal(signal.SIGINT, signal.SIG_IGN)
), то ваш дочерний процесс автоматически также будет.
Есть два важных предостережения:
- Вы должны установить обработчик игнорирования до того, как вызовет дочерний процесс
- Пользовательские обработчики сигналов сбрасываются на обработчики по умолчанию, поскольку дочерний процесс не будет иметь доступа к коду обработчика для его запуска.
Так что, если вам нужно настроить обработку SIGINT, а не просто игнорировать ее, вы, вероятно, захотите временно игнорировать SIGINT при порождении дочернего процесса, а затем (пере) установить свой собственный обработчик сигналов.
Если вы пытаетесь поймать SIGINT и установить флаг, чтобы вы могли выйти в безопасной точке, а не сразу, помните, что когда вы доберетесь до этой безопасной точки, ваш код должен будет вручную очистить своих потомков, так как ваш ребенок процесс и любые процессы, которые он запускает, будут игнорировать SIGINT.