리소스 누출을 시뮬레이션하고 싶습니다.

리소스 누출을 시뮬레이션하고 싶습니다.

프로세스 생성 누출을 "시뮬레이트"하고 완화하기 위해 어떤 운영 체제 호출을 활용할 수 있습니까? 예를 들어, 포크 폭탄은 내가 원하는 것과 유사하지만 포크 폭탄은 프로세스를 기하급수적으로 증가시킵니다. 내가 원하는 것은 시간이 지남에 따라 프로세스를 천천히 유출하여 시간이 지남에 따라 감지하기가 더 쉽고 실제 상황이 더 현실적이 되도록 하는 시스템 호출 또는 프레임워크에 대한 아이디어입니다.

답변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 로 시작할 수 있습니다 A. A생성된 B다음 A무한 절전 루프에 들어갑니다. B계속 반복하고 생성한 C다음 B무한 수면 루프에 들어갑니다. C계속해서 D를 생성하고 루프를 생성한 다음 C무한 수면 루프에 빠지게 됩니다. 시간이 지남에 따라 매초마다 새로운 프로세스가 생성됩니다. 프로그램이 충분히 오랫동안 실행되면 fork()리소스 고갈로 인해 결국 실패하게 되어 이전의 모든 프로세스가 무기한 휴면 상태가 됩니다.

누출이 더 빨리 발생하도록 하려면 usleep()함수에 더 적은 수의 값을 전달하면 됩니다.

관련 정보