我可以利用哪些操作系统系统调用来“模拟”和减轻进程创建泄漏?例如,叉子炸弹与我想要的类似,但是叉子炸弹以指数方式增加进程。我想要的是一个系统调用或一个框架的想法,随着时间的推移,它会慢慢地泄漏进程,这样随着时间的推移,它可能更容易被检测到,并且对于现实生活中的情况来说更现实。
答案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
}
}
这个程序反复:
- 创建一个新进程
- 如果该进程是父进程,则它会进入无限睡眠循环
- 如果该进程是子进程(新进程),则它会休眠一秒钟并继续循环。该过程将重复上述过程。
这样,您就可以从 process 开始A
。 A
创建B
,然后A
进入无限睡眠循环。 B
继续循环并创建C
,然后B
进入无限睡眠循环。 C
继续循环并创建 D,然后C
进入无限睡眠循环,...随着时间的推移,您将每秒获得一个新进程。如果程序运行足够长的时间,fork()
最终会因为资源耗尽而失败,导致前面的所有进程无限休眠。
如果您希望泄漏更快地进行,则可以减少传递给usleep()
函数的值。