似乎 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=yes
:
https ://termbin.com/d6ud