Положение:
Я пишу программу на C, которая поддерживает несколько потоков. После завершения потока создается новый.
Каждый поток разветвляется - дочерний процесс запускает процесс через exec (), а родительский ожидает его завершения.
Кроме того, имеется поток обработчика сигналов, который ожидает сигналов. Если обнаружен SIGINT, то он сообщает основному потоку прекратить создание потоков, поэтому в конечном итоге все потоки заканчиваются и программа может завершиться.
Сигналы блокируются во всех потоках, кроме, конечно, потока обработчика сигналов.
Aim:
Я хочу иметь возможность завершить программу, отправив SIGTERM. Это сработает, остановив основной поток, создав новые потоки, а также остановив запущенные процессы, созданные потоками.
Проблема:
Если сигналы заблокированы во всех потоках, как я могу отправить сигнал запущенным процессам, чтобы прекратить их?
Есть ли способ заставить порожденные процессы получать только сигналы, отправленные из основной программы, а не сигналы, отправленные в основную программу?