Вы абсолютно не можете использовать system("foo &");
для создания фоновых процессов, которые впоследствии сможете отслеживать / уничтожать.Любое такое использование имеет гигантскую присущую ошибку: даже если вы знаете pid, невозможно определить, является ли процесс с этим pid процессом, который вы изначально выполняли, или совершенно другим процессом, который, как оказалось, получилтот же pid позже.
Чтобы решить эту проблему (и бесчисленное множество других проблем, о которых вы не хотите думать, или это повредит вашей голове), вы должны забыть, что вы когда-либо узнали о функции system
, и создатьваш ребенок обрабатывает с fork
и exec
или posix_spawn
.Это приведет к прямому дочернему процессу (ваш текущий метод создает внуков, которые осиротят и будут поглощены процессом init
), который вы можете wait
/ waitpid
включить, и до тех пор, пока вы не выполните операцию wait
,pid дочернего процесса принадлежит вам и не может быть повторно использован, поэтому безопасно отправлять на него сигналы и т. д.