이 스케줄러가 좀비 프로세스를 생성합니까?

이 스케줄러가 좀비 프로세스를 생성합니까?

이와 같은 스케줄러 쉘 스크립트가 있습니다.

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

우수한좀비 프로세스 위키피디아 페이지, 그것은 말한다

상위 프로세스가 wait 호출에 실패하면 좀비 프로세스가 프로세스 테이블에 남아 리소스 누수가 발생합니다.

위 스크립트에서는 해당 wait기능을 사용하지 않습니다(나는 많은 스케줄러 쉘 스크립트를 이런 방식으로 작성했습니다). wait좀비 프로세스를 방지하기 위해 이렇게 사용해야 하는지 궁금합니다 .

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

답변1

2가지 답변이 있습니다.

상위 프로세스가 죽거나 종료되면 해당 프로세스는 init에 의해 상속됩니다. init이 이 작업을 수행합니다. 따라서 단기 프로세스의 경우 걱정할 필요가 없습니다. wait또는 으로 전화하시는 것이 좋습니다 exit.

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

wait종료 코드를 얻은 다음 프로세스를 수집하십시오. Zombi는 매우 적은 리소스를 사용하며 프로세스 테이블의 한 슬롯(프로세스 ID 등)을 제외하고 모든 리소스가 해제됩니다.

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

관련 정보