3

似乎 boost::process::system 正在泄漏 fds:

假设我有这个简单的代码每 3 秒刷新一次 iptables 配置(只是一个例子):

#include <boost/process.hpp>
#include <thread>


int main(void)
{
  while(true)
  {
    std::this_thread::sleep_for(std::chrono::seconds(3));
    boost::process::system(boost::process::search_path("iptables"), "-F");
  }
  return 0;
}

如果我通过 list 观察打开文件描述符的计数/proc/PID/fd |wc -l,我可以看到计数每 3 秒增加 1。最终,当它到达 1024 时,程序将中止,因为该system调用将抛出异常并what()指出 打开的文件太多!

如何避免这种 fd 泄漏?我正在使用提升 1.69。

编辑:替换boost::process::system似乎boost::process::child没有帮助,child似乎也泄漏 fds,无论它是否分离。

编辑 2:Valgrind 日志--track-fds=yeshttps ://termbin.com/d6ud

4

1 回答 1

1

问题似乎是特定版本(1.69)中的错误,而不是发布的代码本身。所以升级提升/修补错误可以解决这个问题。

可以从这里找到错误报告:https ://github.com/boostorg/process/issues/62

于 2019-09-02T15:12:39.027 回答