boost::process 系统泄漏文件描述符

boost::process system leaking file descriptors

似乎 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;
}

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

如何避免这种 fd 泄漏?我正在使用 boost 1.69.

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

编辑 2: 使用 --track-fds=yes 的 Valgrind 日志: https://termbin.com/d6ud

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

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