リソースリークをシミュレートしたいです。

リソースリークをシミュレートしたいです。

プロセス生成リークを「シミュレート」して軽減するために、どのオペレーティングシステムコールを利用できますか?たとえば、フォーク爆弾は私が望むものと似ていますが、フォーク爆弾はプロセスを指数関数的に増加させます。私が望むのは、時間の経過とともにプロセスをゆっくりと漏らし、時間の経過とともに検出するのがより簡単で、実際の状況がより現実的になるようにするシステムコールまたはフレームワークのアイデアです。

答え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生成されBA無限スリープループに入ります。 B繰り返して生成し、C無限Bの睡眠ループに入ります。 C引き続きDを生成し、ループを生成してからC無限の睡眠ループに陥ります。時間の経過とともに、毎秒新しいプロセスが作成されます。プログラムが十分に長時間実行されると、fork()リソースの枯渇が原因で最終的に失敗し、以前のすべてのプロセスが無期限の休止状態になります。

リークがより早く発生するようにするには、usleep()関数に少数の値を渡すだけです。

関連情報