首页 > 解决方案 > 从守护进程启动的控制台应用程序捕获输出

问题描述

如果控制台应用程序是由 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;
}

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

标签: c++c++11

解决方案


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

通常,一个守护进程会在某处记录(例如通过syslogLinux),您可以观察日志目标以获取信息。

否则,不要将其作为守护进程运行。


推荐阅读