从升压::p罗塞斯到升压::子级的信号传播
signal propagation from boost::process to boost::child
我在 Linux 的主应用程序中使用 boost::process
v. 1.65.1 来创建很少的boost::process::child
对象并管理通过boost::process::std_in
和boost::process::std_out
(即管道(交换的数据。
当我的主应用程序收到控制台发送的 CTRL-C 时,我看到子应用程序也收到了 CTRL-C 信号。
要终止我的孩子,我宁愿通过管道发送一个明确的命令,但是当我这样做时,信号已经传播了。实际上,有些孩子看到命令,其他孩子看不到并看到信号。
- 这种信号传播是正常行为吗? 我可以
- 做些什么来防止这种情况发生,以便我可以在不受干扰的情况下通过管道发出命令?
这种信号传播是正常行为吗?
这不是传播本身,而是当您在 POSIX 终端中键入 Ctrl+C 时,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
(。
相关文章:
- Qt VTK交互风格的信号到小部件
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 线程之间的布尔停止信号
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 有可能在信号处理程序中设置promise吗
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 在条件变量中触发错误信号的频率是多少
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 调试和自由执行中的信号处理
- 升压信号2将插槽传递到成员功能以断开连接
- C++函数包装器来捕获某些信号
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- 中止信号来自 C++ 中的中止(3) (SIGABRT)
- Qt将信号与另一个类方法连接
- 从升压::p罗塞斯到升压::子级的信号传播
- 任何方式来取消信号传播在升压信号s2没有例外
- 向c++ 11线程传播信号(SIGINT)