bash 스크립트에서 두 개의 하위 프로세스를 시작하고 다음 wait
명령을 사용하여 두 하위 프로세스가 완료될 때까지 기다립니다.
./proc1 &
pid1=$!
echo "started proc1: ${pid1}"
./proc2 &
pid2=$!
echo "started proc2: ${pid2}"
echo -n "working..."
wait $pid1 $pid2
echo " done"
스크립트는 일반적인 상황에서 잘 작동합니다. 두 프로세스가 모두 완료되기를 기다리고 완료되면 종료됩니다. 하지만 때로는 이 스크립트를 중지해야 할 때도 있습니다(사용 Ctrl+C
). 하지만 중지해도 하위 프로세스는 중단되지 않습니다. 메인 스크립트로 어떻게 완전히 죽일 수 있나요?
답변1
SIGINT(Ctrl+C)를 처리하도록 트랩을 설정합니다. 귀하의 경우 다음과 같습니다.
trap "kill -2 $pid1 $pid2" SIGINT
wait 명령 앞에 넣으면 됩니다.