Использование памяти mem увеличивается с использованием execl () - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть процесс, который запускает openvpn в новом потоке, вызывая функцию execl ().В потоке я использую fork следующим образом.

    c_pid = fork();

    if (c_pid == 0) {
            execl("/usr/sbin/openvpn", "--config", "/tmp/movpn-config", NULL);


    } else if (c_pid > 0) {
            //wait in parent for openvpn to exit
            wait(&status);

    } else {
            printf("ERROR");
    }

Openvpn запускается с сокетом управления, поэтому я могу напрямую отправить SIGTERM для остановки openvpn.В основном я запускаю и останавливаю openvpn в цикле, присоединяясь к указанному выше потоку в моей основной программе после возврата exec и повторяя ту же процедуру снова.Никаких проблем там нет.

Все это работает нормально, за исключением того, что, если я вижу детали своего процесса с помощью ps aux, я вижу, что через каждые несколько минут секция RSS увеличивается, и она связана только с вызовом execl ()..

Если я удаляю весь приведенный выше код из своего потока и заменяю его простым системным вызовом, общее поведение моей программы остается неизменным, и я больше не вижу увеличения значения RSS.

Как этот форк / execl () способствует увеличению памяти?Должен ли я выполнить дополнительную очистку, кроме команды wait ()?

...