스크립트 자체에서 스크립트의 여러 인스턴스 종료

스크립트 자체에서 스크립트의 여러 인스턴스 종료

여러 개의 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. ) &다음 스크립트를 종료할 수 있습니다.

관련 정보