Остановите дочерние процессы после выхода из основной программы c ++ - PullRequest
1 голос
/ 31 марта 2020

После завершения родительской работы ребенок еще жив? Если так, как я могу убить его, если основной процесс завершен? Я использовал boost библиотеки (boost, boost asio) . Если возможно, это должно быть решение для MacOs , Windows и Linux.

boost::asio::io_service ioservice;
namespace bp = boost::process;
bp::child c(args);
ioservice.run();
c.wait();
result = c.exit_code();

1 Ответ

0 голосов
/ 31 марта 2020

«после» его выхода, вероятно, сложно, но вы могли бы сделать это до того, как он выйдет (или «как» он выйдет) легко. Например, отправьте каждому дочернему элементу явное сообщение для отключения через канал. Или, в большинстве операционных систем, вы можете просто отправить им сигнал TERM.

Вы можете зарегистрировать обработчик atexit, чтобы сделать это, но я бы оставил это простым и просто поместил эту функцию на естественный выход программы точка (и).

С другой стороны, дети могут периодически проверять статус своих родителей и выходить из него, если он отсутствует.

...