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