распространение сигнала от boost :: process to boost :: child

я использую boost::process v. 1.65.1 в главном приложении для Linux, чтобы создать несколько boost::process::child объекты и управлять данными, которыми обмениваются с помощью boost::process::std_in а также boost::process::std_out то есть трубы.

Когда мое главное приложение получает CTRL-C, отправленный консолью, я вижу, что дочерний элемент также получает сигнал CTRL-C.

Чтобы прервать моего ребенка, я бы предпочел послать команду очистки через канал, но когда я делаю это, сигнал уже распространяется. На самом деле, один ребенок видит команду, а другие нет и видит сигнал.

  1. Является ли распространение этого сигнала нормальным поведением?
  2. Что я могу сделать, чтобы предотвратить это, чтобы я мог выдавать свою команду через канал без помех?

0

Решение

Является ли распространение этого сигнала нормальным поведением?

Это не распространение как таковое, это то, что когда вы печатаете Ctrl+С в терминале POSIX, SIGINT сигнал транслируется на все процессы из терминала группа процессов переднего плана. Группы процессов управляются оболочкой и по умолчанию обработанные ветки остаются в группе родителя (источник).

Что я могу сделать, чтобы предотвратить это, чтобы я мог выдавать свою команду через канал без помех?

перехват SIGINT У ребенка и проведите необходимую уборку:

#include <boost/asio/signal_set.hpp>
#include <iostream>

void exit_handler(const boost::system::error_code&, int signal_number)
{
std::cerr << "Signal " << signal_number << "!\n";
exit(1);
}

int main()
{
boost::asio::io_service io_service;

boost::asio::signal_set signals(io_service, SIGINT);

signals.async_wait( exit_handler );

io_service.run();
}

Вероятно, неплохо бы подумать и о других сигналах (HUP, TERM).

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector