Я пытаюсь запустить процесс и прочитать его вывод. Для этого я использовал дочерний процесс ускорения. Я тестировал его на Linux, и он работает в нормальных случаях. Но если я установил неправильный путь к исполняемому файлу, потомок выдает исключение и оставит утечку канала и зомбированный процесс ie. Это ошибка ускорения, или я что-то делаю не так?
sleep (1000) добавляется в конец основной функции, чтобы иметь время проверить на наличие зомб ie процесса и утечки в трубе.
#include <boost/process.hpp>
#include <iostream>
namespace bp = boost::process;
static bp::child g_childProcess;
static bp::group g_processGroup;
void Run()
{
bp::ipstream pipeStream;
try
{
g_childProcess = bp::child("non_existing_script.sh", bp::std_out > pipeStream, g_processGroup);
}
catch (std::exception& ex)
{
std::cout << "Process execution failed: " << ex.what() << std::endl;
std::error_code ec;
g_processGroup.terminate(ec);
ec.clear();
g_childProcess.wait(ec);
return;
}
std::string line;
std::getline(pipeStream, line);
std::error_code ec;
g_childProcess.wait(ec);
int result = g_childProcess.exit_code();
if (result)
{
std::cout << "Process exited with error code " << result << std::endl;
return;
}
std::cout << "The process output is " << line << std::endl;
}
int main(int argc, char** argv)
{
Run();
sleep(1000);
return 0;
}