Почему моя программа не удаляется системным вызовом pkill из другой программы? - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь написать интеграционный тест, который осуществляет взаимодействие между двумя отдельными программами. Программа 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.

Чего мне не хватает?

...