방금 시스템이 사용자 당 프로세스 수를 올바르게 제한하지 않아서 사용자가 포크 폭탄을 수행하고 전체 시스템을 충돌시키지 못하게한다는 것을 깨달았습니다.
user@thebe:~$ cat /etc/security/limits.conf | grep user
user hard nproc 512
user@thebe:~$ ulimit -u
1024
user@thebe:~$ :(){ :|:& };:
[1] 2559
user@thebe:~$ ht-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
...
Connection to thebe closed by remote host.
이것이 버그입니까? 또는 한계를 무시하는 limits.conf
이유는 ulimit -n
무엇입니까? 왜 한계를 적용하지 않습니까?
추신 : 나는 프로세스 한계 전에 메모리 한계에 도달했다고 생각하지 않습니다. 이 기계에는 8GB 램이 있으며 포크 폭탄을 떨어 뜨렸을 때 4 % 만 사용했습니다.
편집하다:
나는 이것을 라이브 CD로 재생할 수있었습니다. 그래서 나는 이것이 버그라고 생각합니다. 기본적으로 X11, SSHD 등과 같은 시스템 중요 사항을 포함한 모든 프로세스가 종료됩니다.
모든 사용자가 시스템을 중단시킬 수 있습니다.
@psusi, 감사합니다,하지만 같은 결과를 제공합니다 : s
—
d_inevitable
user@thebe:~$ ulimit -u
1024
내가 달릴 때 나는
—
psusi
ulimit -u
31325를 얻는다. 나는 달릴 ulimit -u 512
때 512가된다. 그 포크 폭탄을 달릴 때, 내 시스템의 나머지는 괜찮다.
ulimit -u