我想模拟资源泄漏

我想模拟资源泄漏

我可以利用哪些操作系统系统调用来“模拟”和减轻进程创建泄漏?例如,叉子炸弹与我想要的类似,但是叉子炸弹以指数方式增加进程。我想要的是一个系统调用或一个框架的想法,随着时间的推移,它会慢慢地泄漏进程,这样随着时间的推移,它可能更容易被检测到,并且对于现实生活中的情况来说更现实。

答案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. 如果该进程是子进程(新进程),则它会休眠一秒钟并继续循环。该过程将重复上述过程。

这样,您就可以从 process 开始AA创建B,然后A进入无限睡眠循环。 B继续循环并创建C,然后B进入无限睡眠循环。 C继续循环并创建 D,然后C进入无限睡眠循环,...随着时间的推移,您将每秒获得一个新进程。如果程序运行足够长的时间,fork()最终会因为资源耗尽而失败,导致前面的所有进程无限休眠。

如果您希望泄漏更快地进行,则可以减少传递给usleep()函数的值。

相关内容