이 디스패처는 좀비 프로세스를 생성합니까?

이 디스패처는 좀비 프로세스를 생성합니까?

그런 디스패처 쉘 스크립트가 있습니다.

while read line
do
    java TestProg $line &
done < $tasklist

좀비 프로세스 Wikipedia 페이지, 그것은 말한다

부모가 wait 호출에 실패하면 좀비는 프로세스 테이블에 남게 되어 리소스 누수가 발생합니다.

위의 스크립트에서는 wait함수를 사용하지 않았습니다(이 방법으로 많은 디스패처 쉘 스크립트를 작성했습니다). wait좀비 프로세스를 방지하기 위해 이와 같은 사용이 필요한지 궁금합니다 .

while read line
do
    java TestProg $line &
done < $tasklist
wait

답변1

2가지 답변이 있습니다.

부모가 죽거나 종료되면 프로세스는 init에 의해 상속됩니다. init이 당신을 위해 그것을 할 것입니다. 따라서 단기 실행 프로세스의 경우 걱정할 필요가 없습니다. 조언은 전화 wait또는 이어야 합니다 exit.

나는 bash 호출이 당신을 기다리고 종료 코드를 어딘가에 넣는다고 생각합니다.

wait종료 코드만 가져온 다음 프로세스를 회수합니다. 좀비는 리소스를 거의 사용하지 않으며 프로세스 테이블의 슬롯(프로세스 ID 등)을 제외하고 모두 해제됩니다.

좀비가 죽었습니다. 프로세스 테이블의 슬롯을 제외한 모든 리소스가 해제됩니다. 프로세스 테이블 슬롯이 해제되지 않는 이유는 부모가 (무엇보다도) 반환 코드를 얻고 프로세스 ID(pid)를 재사용하는 다른 프로세스에 도달하지 않고 방금 죽은 자식에게 신호를 보낼 수 있기 때문입니다.

관련 정보