Я пытаюсь написать интеграционный тест, который осуществляет взаимодействие между двумя отдельными программами. Программа A - это служебная программа, которая генерирует данные для использования Программой B, поэтому я запускаю Программу A с вызовом
system("ProgramA params");
Эта часть работает, поэтому программа B будет запущена, а позже, после завершения анализа данных, я хочу завершить программу A, поэтому я выполняю
system("pkill -2 ProgramA");
Этот вызов возвращает 0, и поэтому тест интеграции завершается, но когда я запускаю
pgrep ProgramA
из терминала показывает PID, указывающий, что процесс все еще выполняется.
Кроме того, если я запускаю Программу A из командной строки, то signalHandler действительно выполняется, когда я нажимаю Ctrl-C для отправки SIGINT, указывая, что signalHandler по крайней мере иногда перехватывает сигналы.
Программа A является многопоточной, с использованием библиотеки pthread, где основной поток использует
signal(SIGINT, *signalHandler)
для перехвата прерываний, и все дочерние процессы блокируют все сигналы.
И да, я запускаю pgrep перед интеграционным тестом, чтобы убедиться, что нет запущенных процессов, выполняющих Программу A.
Чего мне не хватает?