%7B%20%3A%7C%3A%20%26amp%3B%20%7D%3B%3A%3F.png)
bash의 포크 폭탄과 관련하여 몇 가지 질문이 있지만 :(){ :|: & };:
답변을 확인했을 때 다음 함수에 하나의 함수가 삽입될 때 폭탄의 해당 부분이 정확히 무엇을 하는지 여전히 알 수 없습니다. 기본적으로 이 부분입니다 :|:
.
지금까지 나는 파이프 표기법이 첫 번째 명령의 표준 출력을 두 번째 명령의 표준 입력에 연결하여 두 명령을 연결한다는 것을 이해했습니다. echo "Turkey will rule the world" |
하지만 첫 번째 함수가 표준 출력을 통해 푸시하는 것이 무엇인지 이해하지 못합니다. 이는 두 번째 함수로 푸시됩니다. 결국 함수 내부에는 반환 값이 정의되어 있지 않으므로 처음에 사람의 배가 비어 있으면 어떻게 될까요?
답변1
짧은 대답: 아무것도 없습니다.
프로세스가 STDIN에서 아무것도 허용하지 않는 경우에도 여전히 파이프로 연결할 수 있습니다. 마찬가지로 STDOUT에서 아무것도 생성하지 않는 프로세스에서 파이프를 계속할 수 있습니다. 효과적으로는 단일 EOF 표시기를 두 번째 프로세스로 파이프하기만 하면 무시됩니다. 파이프를 사용하여 빌드하는 것은 "각 프로세스를 두 개 더 시작" 테마의 변형일 뿐입니다. 이 포크 폭탄은 다음과 같이 작성할 수도 있습니다.
:(){ :&:; }; :
첫 번째 재귀 호출이 즉시 백그라운드로 전환되면 두 번째 호출이 이루어집니다.
일반적으로 그렇습니다. 파이프 기호( |
)는 언급한 작업을 수행하는 데 사용됩니다. 첫 번째 프로세스의 STDOUT을 두 번째 프로세스의 STDIN에 연결합니다. 파이프를 통과하는 유일한 것은 단일 EOF 표시지만 이것이 여기서 수행되는 작업입니다.