从守护程序启动的控制台应用程序捕获输出

时间:2019-04-24 13:04:38

标签: c++ c++11

如果它是由Ubuntu Server 18.04中的守护进程启动的,那么如何从控制台应用程序捕获输出?对于非守护进程,我通常使用以下命令:

string myexec(const char* cmd) 
{
    array<char, 128> buffer;
    string result = "";
    unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd, "r"), pclose);
    if (!pipe) 
    {
        result = "FAIL";
        throw std::runtime_error("popen() failed!");
    }
    while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) 
    {
        result += buffer.data();
    }
    return result;
}

按原样运行此程序,从守护程序运行不会失败,只是返回空。

1 个答案:

答案 0 :(得分:2)

不是。守护程序分离运行。这就是使它成为守护程序的原因。

通常,守护程序会在某个地方记录日志(例如,在Linux上通过await登录),您可以观察日志目标以获取信息。

否则,请勿将其作为守护程序运行。