Убить программу, запущенную с помощью system () в дочернем потоке - PullRequest
0 голосов
/ 14 июля 2020

У меня есть основная программа, из которой я создаю два потока с помощью pthread_create (). В одном потоке я вызываю

Thread I {... system ("двоичное приложение");

}

System () внутренне разветвляет дочерний процесс. Как я могу убить это "двоичное приложение" из основной программы ??

1 Ответ

0 голосов
/ 14 июля 2020

Это напрямую не поддерживается.

Вам нужен PID, чтобы убить процесс, а system() предназначен для синхронного выполнения некоторой команды - он не раскрывает PID вызванной команды. Действительно, system() может порождать несколько PID, несколько поколений потомков, возможно, /bin/sh, а затем ваш binary-application.

Как бы вы убили binary-application из внешнего процесса (не нить, а полностью внешний процесс)? Как бы то ни было, вы могли бы сделать это, так как ваш поток-убийца может получить PID.

Вероятно, проще установить будильник по команде или вместо этого вызвать fork() (что дает вам PID) и exec() в вашем собственном коде. В любом случае, system() в многопоточной программе может быть сложно , поэтому будьте осторожны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...