이 포크 폭탄에서 다른 함수로 파이프되는 함수는 정확히 무엇입니까 :(){ :|: & };:?

이 포크 폭탄에서 다른 함수로 파이프되는 함수는 정확히 무엇입니까 :(){ :|: & };:?

bash에 대한 포크 폭탄과 관련된 몇 가지 질문이 있지만 :(){ :|: & };:답변을 확인했을 때 하나의 기능이 다음 기능, 즉 기본적으로 이 부분으로 파이프될 때 폭탄의 부분이 정확히 무엇을 하는지 알 수 없었습니다 :|:.

지금까지 나는 파이프 기호가 첫 번째의 표준 출력을 두 번째의 표준 입력에 연결하여 두 명령을 연결한다는 것을 이해했습니다. 예를 들어 echo "Turkeys will dominate the world" | sed 's/s//'.

그러나 첫 번째 함수가 표준을 통해 푸시하고 두 번째 함수로 푸시되는 것이 무엇인지 이해하지 못합니다. 결국 함수 내부에 정의된 반환 값이 없으므로 인간 지네를 통해 이동하는 것은 무엇입니까? 처음에는 배가 비어 있나요?

답변1

짧은 대답: 아무것도 없습니다.

프로세스가 STDIN에서 아무 것도 가져오지 않는 경우에도 해당 프로세스로 파이프할 수 있습니다. 마찬가지로 STDOUT에서 아무것도 생성하지 않는 프로세스에서 파이프를 계속할 수 있습니다. 사실상 단일 EOF 표시기를 두 번째 프로세스에 파이프하는 것뿐입니다. 이는 단순히 무시됩니다. 파이프를 이용한 시공은 단순히 "모든 과정은 두 번 더 시작된다"는 주제의 변형일 뿐입니다. 이 포크 폭탄은 다음과 같이 작성될 수도 있고 때로는 작성될 수도 있습니다.

:(){ :&:; }; :

첫 번째 재귀 호출이 즉시 백그라운드로 실행되면 두 번째 호출이 이루어집니다.

일반적으로 그렇습니다. 파이프 기호( |)는 언급한 작업을 정확하게 수행하는 데 사용됩니다. 첫 번째 프로세스의 STDOUT을 두 번째 프로세스의 STDIN에 연결합니다. 해당 파이프를 통과하는 유일한 것은 단일 EOF 표시기임에도 불구하고 여기서 수행하는 작업도 마찬가지입니다.

관련 정보