boost::process system утечка файловых дескрипторов

Похоже, что boost:: process:: system пропускает fds:

Допустим, у меня есть этот простой код для сброса конфигурации iptables каждые 3 секунды (просто пример):

#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 секунды. В конце концов, когда он достигнет 1024, программа прервется, потому чтоsystem вызов вызовет исключение с what()заявляя, что слишком много открытых файлов!

Как я могу избежать этой утечки fd? Пользуюсь бустом 1.69.

РЕДАКТИРОВАТЬ: замена boost::process::system с boost::process::child похоже, не помогает, child кажется, также утечка файловых дисков, независимо от того, отсоединяется он или нет.

РЕДАКТИРОВАТЬ 2: журнал Valgrind с --track-fds=yes:https://termbin.com/d6ud

1 ответ

Решение

Проблема, похоже, связана с ошибкой в ​​конкретной версии (1.69) boost, а не в самом опубликованном коде. Таким образом, обновление boost / исправление ошибки решает эту проблему.

Отчет об ошибке можно найти здесь: https://github.com/boostorg/process/issues/62

Другие вопросы по тегам