下面的代码尝试插入一个不存在的内核模块,但失败-但是它输出“成功”:
#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
,异常)吗?
答案 0 :(得分:0)
启动并运行进程 成功。
不加载模块是完全可以接受的结果,绝不是“例外”。
error_code
或存在技术例外情况的例外情况。例子是
/sbin/modprobe
等等。
其他任何“失败”都不是Boost Process失败。它们可能适用于您正在运行的程序。查看正在运行的程序的文档,看看它如何发出信号(退出代码,stderr,stdout)。
因此,您可以决定要处理的错误,但我建议您同时处理两组错误。
注意:还有另一种隐藏的终止方式,即程序由于收到信号(您,内核或其他进程杀死了它)而没有机会参与竞争。由您决定是否需要检测这种情况并单独处理。