boost :: process :: ребенок оставляет зомби и протекает труба - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь запустить процесс и прочитать его вывод. Для этого я использовал дочерний процесс ускорения. Я тестировал его на 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;
}
...