Boost进程"系统"功能中的错误处理

Errors handling in the Boost Process `system` function

本文关键字:quot 错误 处理 系统 进程 Boost 功能      更新时间:2023-10-16

下面的代码试图插入一个不存在的内核模块,但它失败了,但它输出"成功":

#include <iostream>
#include <boost/process/system.hpp>
int main()
{
std::error_code ec;
boost::process::system("modprobe abc", ec);
std::cout << ec.message() << std::endl;
}

为什么?

此外,Boost Process文档声称,这里没有最后一个参数的system调用会生成一个异常,但对我来说并没有

我应该只使用这个函数的返回值,而忘记Boost文档中描述的处理错误(std::error_code,异常(的其他方法吗?

成功启动并运行流程

没有加载的模块是一个完全可以接受的结果,一点也不"例外"。

当出现技术异常时,会出现error_code或异常。就是一个例子

  • /sbin/modprobe未找到
  • 用户无权执行该二进制文件
  • 存在资源问题(根据ulimits的说法,许多子进程(

等等。

任何其他"故障"都不是Boost进程的故障。它们可能是为你正在运行的程序准备的。查看正在运行的程序的文档,了解它将如何发出信号(退出代码、stderr、stdout(。

所以你决定处理什么错误,但我建议你同时处理这两组错误。

注意:还有另一种隐藏的终止模式,程序因为收到信号而没有机会竞争(你、内核或另一个进程杀死了它(。由您决定是否需要检测这种情况并单独处理。