Boost Process`system`函数中的错误处理

时间:2018-07-31 16:08:49

标签: c++ boost

下面的代码尝试插入一个不存在的内核模块,但失败-但是它输出“成功”:

#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,异常)吗?

1 个答案:

答案 0 :(得分:0)

启动并运行进程 成功。

不加载模块是完全可以接受的结果,绝不是“例外”。

error_code或存在技术例外情况的例外情况。例子是

    找不到
  • /sbin/modprobe
  • 用户无权执行该二进制文件
  • 存在一个资源问题(根据ulimits,许多子进程都存在该问题)

等等。

其他任何“失败”都不是Boost Process失败。它们可能适用于您正在运行的程序。查看正在运行的程序的文档,看看它如何发出信号(退出代码,stderr,stdout)。

因此,您可以决定要处理的错误,但我建议您同时处理两组错误。

  

注意:还有另一种隐藏的终止方式,即程序由于收到信号(您,内核或其他进程杀死了它)而没有机会参与竞争。由您决定是否需要检测这种情况并单独处理。