이 포크 폭탄 스크립트에 대해 혼란스러워함

이 포크 폭탄 스크립트에 대해 혼란스러워함

아래와 같은 쉘 스크립트가 인터넷에 돌아다니고 있습니다.

:(){ :|: & };:

기본적으로 이 쉘 스크립트는 자신을 호출하는 함수를 생성하여 무한 재귀를 발생시킵니다. 분명히 이것은 리소스가 고갈되고 시스템이 충돌할 때까지 계속되는 포크 폭탄입니다.

내 질문은 이 스크립트가 스택 오버플로를 일으키고 모든 시스템 리소스를 소비하기 전에 쉘이 세그폴트를 발생시키지 않습니까?입니다. 이것이 정확히 어떻게 작동하나요?

답변1

최신 Linux 버전에서는 이 코드를 bash에서 실행해도 시스템이 충돌하지 않습니다. 그것이 하는 일은 "포크" 시스템 호출을 남용하는 것입니다. 함수의 "&"는 백그라운드에서 실행된다는 의미이며, 이를 시도할 때 fork() 시스템 호출을 사용합니다. 포크를 너무 많이 사용하면 포크를 사용할 수 없으므로 포크도 필요하기 때문에 새 애플리케이션을 시작할 수 없습니다. 하지만 애플리케이션과 이미 실행 중인 애플리케이션은 문제가 없습니다.

관련 정보