좀비 프로세스는 수확을 위해 "대기"할 필요가 없습니다.

좀비 프로세스는 수확을 위해 "대기"할 필요가 없습니다.

하위 프로세스가 올바른 수확을 얻지 못하면 좀비가 된다는 것을 알고 있습니다. ps명령을 사용하면 이를 볼 수 있습니다.

또한 "wait [pid]" 명령은 서브셸이 완료되어 가져올 때까지 백그라운드에서 실행되는 서브셸을 기다립니다.

다음과 같은 스크립트가 있습니다.

#!/bin/bash
sleep 5 &

tail -f /dev/null

wait내 질문은 나는 after를 사용하지 않고 sleep 5 &그것 때문에 부모 쉘이 결코 종료되지 않는다는 것입니다 tail. 그렇다면 왜 sleep 5 &좀비가 되지 않습니까? 다 만들고 나서 사라지는 걸 봤는데 ps, 누가 수확한 건지 궁금해요.

답변1

이는 운영 체제 API를 모방하기 위해 셸을 사용할 때의 함정 중 하나입니다. 그것은 혼란을 야기합니다. 이런 경우에는 혼란스러울 것입니다.기다리다()(리눅스 API)기다리다(배쉬 기능).

간단합니다. Bash가 수집 프로세스를 처리하므로 일반적으로 그것에 대해 생각할 필요가 없습니다. bash 명령은 wait수집 프로세스에 영향을 미치지 않습니다.

하위 작업이 종료되면 bash가 통과됩니다.SIGCHLD 신호. 이런 일이 발생하면 bash는 수행 중인 작업을 모두 중지하고 중지된 자식을 수집합니다. 그런 다음 하던 일로 돌아갑니다.

답변2

" "를 사용하려면 &상위 프로세스가 " sleep 5"를 백그라운드에 배치해야 하므로 상위 프로세스가 를 수확합니다 sleep 5.

관련 정보