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 漏れを回避するにはどうすればよいですか? ブースト1.69を使用しています。
編集: と置き換えboost::process::system
てもboost::process::child
役に立たないようですchild
。切り離されたかどうかに関係なく、fds もリークしているようです。
編集 2: Valgrind ログ--track-fds=yes
:
https://termbin.com/d6ud