1이 종료 코드 1을 반환하면 모든 하위 프로세스를 중지합니다.

1이 종료 코드 1을 반환하면 모든 하위 프로세스를 중지합니다.

백그라운드에서 실행할 빌드 프로세스가 2개 이상 있습니다. 빌드 프로세스 중 하나가 0이 아닌 코드로 종료되면 모든 빌드 프로세스를 중지하고 싶습니다.

./build-1.sh &
./build-2.sh &
./build-3.sh &
wait
#other steps

현재는 wait모든 프로세스가 완료될 때까지 기다려야 하는 방법을 사용하고 있습니다. 하지만 그중 하나가 실패하면 다른 모든 빌드를 중지하고 싶습니다. 어떻게 해야 하나요?

답변1

당신이 찾고 있는 것은 일반적으로 a라고 불리며 named pipe프로세스 간 통신(IPC)에 사용됩니다. Bash에서 명명된 파이프를 생성하는 방법에 대한 훌륭한 문서가 많이 있으므로 이에 대한 코드를 작성하는 것은 여러분의 몫입니다.

명명된 파이프가 있으면 각 프로세스의 PID를 파이프에 쓰는 것과 같은 작업을 수행할 수 있습니다( $$현재 PID에 대한 Bash 특수 변수 사용). 그런 다음 각 프로세스가 루프에 앉아 있는지 확인하도록 할 수 있습니다. 각 PID. 더 이상 존재하지 않는 프로세스(프로세스가 종료되거나 종료됨)를 만나면 조치를 취할 수 있습니다.

스크립트의 적절한 섹션에 이와 같은 내용을 넣을 수 있습니다. 먼저 테스트해 보세요. :)

trap "rm -f $named_pipe" EXIT

# Assuming you have a file under $named_pipe with space-delimited PIDs
pids = $(< $named_pipe)
while :
do
  for pid in pids:
  do 
    if ! kill -0 $pid;
    then
      exit
    fi
  done
done

관련 정보