Я хочу имитировать утечку ресурсов

Существует также версия, использующая pdfjoin/pdfjam (, например здесь ), с перемешиванием последовательности номеров страниц и использованием ее в качестве входных данных для pdfjoin:

# $1: source pdf file
# $2: last page number to consider
# $3: name of output file

for k in $(seq 1 $2 | shuf); do
    PAGES+=($1);
    PAGES+=($k);
done

pdfjoin ${PAGES[@]} --outfile $3

2
30.04.2020, 01:12
1 ответ

Если вам нужна медленная утечка процесса, вам может понадобиться что-то вроде этого:

#include <stdio.h>
#include <unistd.h>

int main(void)
{
    for (;;) {
        pid_t pid = fork();  // (1)

        if (pid < 0) {
            perror("fork");
            return 1;
        }

        if (pid > 0) {      // (2)
            for (;;) {
                sleep(60 * 60);
            }
        }

        // pid == 0 : child   (3) keep looping
        usleep(1000000); // 1 second
    }
}

Эта программа повторяется:

  1. Создает новый процесс
  2. Если процесс был родителем, то он входит в бесконечный спящий цикл
  3. Если процесс был дочерним (новым процессом ), то он засыпает на секунду и продолжает цикл. Этот процесс будет повторять вышеописанное.

При этом вы начинаете с процесса A. Aсоздает B, затем Aвходит в бесконечный цикл сна. Bпродолжает цикл и создает C, затем Bвходит в бесконечный цикл ожидания. Cпродолжает цикл и создает D, затем Cвходит в бесконечный цикл ожидания,... Вы будете получать один новый процесс в секунду с течением времени. Если программа работает достаточно долго, fork()в конце концов завершится с ошибкой из-за исчерпания ресурсов, оставив все предшествующие процессы бесконечно бездействующими.

Если вы хотите, чтобы утечка происходила быстрее, вы можете уменьшить значение, передаваемое функции usleep().

1
28.04.2021, 23:17

Теги

Похожие вопросы