c++ - 从守护进程启动的控制台应用程序捕获输出
问题描述
如果控制台应用程序是由 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;
}
从守护进程按原样运行它不会失败,只是返回空。
解决方案
它不是。守护进程分离运行。这就是使它成为守护进程的原因。
通常,一个守护进程会在某处记录(例如通过syslog
Linux),您可以观察日志目标以获取信息。
否则,不要将其作为守护进程运行。
推荐阅读
- java - 根据 SOLID 主体注册侦听器
- javascript - 在这种情况下使用 .map 是否正确?
- python - 从 json 读取 str、bool 的元组列表到一个类中
- ubuntu - 在 Ubuntu20.04 中构建 Gem5
- relation - 在关系中查找给定值的图像
- ios - 找不到“Flutter/Flutter.h”文件
- python - 在单元测试中使用 DRF API 密钥进行身份验证返回错误:“未提供身份验证凭据”
- java - 如何序列化地图
到没有反斜杠的 JSON 对象 - python - Twitter API:如何将不记名令牌放入请求中
- google-sheets - 如何在谷歌表格中突出显示选定单元格的匹配单元格?