![스크립트 자체에서 스크립트의 여러 인스턴스 종료](https://linux55.com/image/54278/%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20%EC%9E%90%EC%B2%B4%EC%97%90%EC%84%9C%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98%20%EC%97%AC%EB%9F%AC%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%20%EC%A2%85%EB%A3%8C.png)
여러 개의 script.sh 인스턴스가 병렬로 실행되고 동일한 작업을 수행하며 백그라운드에서 실행됩니다.
실행 시 현재 실행 중인 모든 스크립트를 종료하는 함수를 사용하려고 합니다.
예를 들어 ./script.sh -start 는 스크립트를 시작하고(여러 스크립트를 병렬로 실행할 수 있음) ./script.sh -kill 을 실행하면 스크립트의 모든 인스턴스가 종료됩니다.
f() {
procName=`basename $0`
pidsToKill=`ps -ef | grep $procName | grep -v grep | awk '{ print $2 }'`
if [[ $pidsToKill ]]; then
for i in $pidsToKill; do
kill -9 $i
done
echo "Killed running scripts."
else
echo "No opened scripts to kill"
fi
}
어떤 이유로 여러 스크립트가 종료되거나 오류가 반환되는 경우도 있습니다.
이 문제에 대한 해결책을 찾았지만 왜 이것이 작동하지 않는지 알고 싶습니다. 어떤 아이디어가 있나요?
답변1
대본이 자살할 수도 있습니다. 별도의 하위 쉘에서 for 루프를 실행한 ( for i in $pidsToKill; do kill -9 $i; done; echo All dead. ) &
다음 스크립트를 종료할 수 있습니다.