좀비를 수확하기 위해 다음 명령을 실행하겠습니다.
/usr/bin/preap $(ps -ef | grep defunct | grep -v grep | awk '{ print $2 }' | xargs)
이 접근 방식이 서비스에 영향을 미치나요?
답변1
부모 좀비보다 먼저 좀비를 수확하면 부모 좀비에 대한 수확 효과가 사라집니다. 이는 분명히 응용 프로그램에 따라 다릅니다.
적극적으로 좀비를 수확할 이유가 없습니다. 일부 운영 체제에서는 상위 프로세스를 수동으로 추적하고 waitpid
시스템 호출을 수행하지 않는 한 이를 허용하지 않습니다 . Solaris는 유틸리티를 제공 preap
하지만 이를 사용해야 하는 유일한 경우는 프로그램이 예기치 않게 작동하여 프로세스 테이블을 좀비 프로세스로 채울 때입니다.
답변2
스크립트는 좀비를 조기에 수확하여 부모가 좀비를 수확하는 것을 방지하고 예상치 못한 동작을 유발할 수 있습니다.
이러한 좀비 프로세스 존재의 근본 원인을 해결할 수 없다고 가정하면 합법적인 수확을 우회하지 않을 만큼 오랫동안(예: 1분) 정지 상태에 있었던 프로세스만 수확하겠습니다.
for pid in $(ps -eo pid,s | nawk '$2 == "Z" {print $1 };sleep 60)
do
preap $pid
done
그런데 | xargs
개행 문자가 유효한 매개변수 구분 기호이기 때문에 스크립트에서는 쓸모가 없습니다.