当子进程由于分段违规或除为零或任何其他终止信号而被终止时,我正在尝试获取子进程的退出代码(使用 boost::process 和 boost::asio)。退出代码和错误代码始终返回 0 并成功。
我在 CentOS 7 上使用 g++ 4.8.5 和 boost 1.66 运行它
如果我使用仅返回非零退出代码的子进程运行相同的代码,它会成功返回该退出代码。
#include <iostream>
#include <boost/process.hpp>
#include <boost/asio/io_service.hpp>
namespace bp = boost::process;
using namespace std;
int main (int argc, char** argv)
{
string exe = "./crashes";
vector<string> data;
boost::asio::io_service ios;
int exit_code;
error_code ec;
future<string> ostr;
bp::child c(exe,
(bp::std_out & bp::std_err) > ostr,
ios,
bp::on_exit=[&exit_code, &ec](int exit, const error_code& ecin)
{exit_code = exit; ec = ecin;});
ios.run();
cout << "Exit Code = " << exit_code << endl;
cout << "Error Code = " << ec.message() << endl;
cout << "child stdin & stderr:\n";
cout << ostr.get() << endl;
return exit_code;
}
和崩溃代码
int main (int argc, char** argv)
{
int* y = 0;
int c = *y;
}
结果显示 0 退出代码和成功 error_code
Exit Code = 0
Error Code = Success
child stdin & stderr:
单独运行 crash 可执行文件会返回 139 的退出代码
bash-4.2$ ./crashes
Segmentation fault (core dumped)
bash-4.2$ echo $?
139