Я пытаюсь взаимодействовать с действительно дрянным, полностью непрозрачным API, который создает два подпроцесса в среде, подобной POSIX (OS X/Linux) в C. В принципе, он запускает внешнюю программу и обеспечивает рудиментарную поддержку для передачи сообщений туда и обратно. Дерево процесса выглядит примерно так:Предотвратить отправку SIGINT всем дочерним элементам группы процессов
+ My_program
\
+ an initiation shell script (csh -f -c external_program_startup_script)
\
- the external program instance
Когда я нажимаю Ctrl + C в терминале, а My_program
работает, управляющий терминал посылает SIGINT всех процессов в своей группе процессов - все три указанных выше процессов. I хочу SIGINT, чтобы получить экземпляр программы, но если он также попадает в сценарий оболочки, тогда этот средний процесс завершается, и линия связи прерывается.
В пределах My_program
я могу настроить обработчик сигнала, чтобы игнорировать SIGINT. Но у меня нет абсолютно никакого контроля над двумя дочерними процессами (API даже не раскрывает их PID), поэтому существующие решения, такие как изменение их группы процессов или привязки обработчиков, не будут работать. Есть ли способ запретить управляющему терминалу отправлять SIGINT ко всем процессам в группе процессов переднего плана?
(API-интерфейс в вопросе MATLAB's libeng, что позволяет внешнюю программу C для обработки команд в MATLAB. Но это не имеет абсолютно никакой функции для отправки прерываний за то, что обеспечивает ОС.)
У меня такое чувство, что я знал ответ на этот вопрос в какой-то момент – Shahbaz