![Ctrl+C를 사용하여 bash 스크립트에서 하위 프로세스를 중단합니다.](https://linux55.com/image/162073/Ctrl%2BC%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%ED%95%98%EC%9C%84%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%A5%BC%20%EC%A4%91%EB%8B%A8%ED%95%A9%EB%8B%88%EB%8B%A4..png)
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 명령 앞에 넣으면 됩니다.