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

リストを作成して開いているファイル記述子の数を観察すると、/proc/PID/fd |wc -l3 秒ごとに数が 1 ずつ増加していることがわかります。最終的に、1024 に達すると、開いているファイルが 多すぎるsystemことを示す例外が呼び出しによってスローされるため、プログラムは中止されます。what()

この fd 漏れを回避するにはどうすればよいですか? ブースト1.69を使用しています。

編集: と置き換えboost::process::systemてもboost::process::child役に立たないようですchild。切り離されたかどうかに関係なく、fds もリークしているようです。

編集 2: Valgrind ログ--track-fds=yes: https://termbin.com/d6ud

4

1 に答える 1