
두 개의 백그라운드 서버 프로세스(종료는 문제가 발생했음을 의미함)를 포크하는 bash 스크립트를 작성하려고 하는데 스크립트가 종료됩니다.그 중 하나가 종료되면(다른 것을 기다릴 필요가 없습니다).
이것이 내가 지금까지 시도한 것입니다:
1번 시도
bash wait
명령을 사용하십시오. 두 프로세스가 모두 완료될 때까지 기다리고 있기 때문에 작동하지 않습니다. 내 경우에는 두 개의 서버 프로세스가 실행 중이므로 프로세스가 완료되면 문제가 발생했다는 의미이므로 이 스크립트를 완전히 종료해야 합니다.
#!/usr/bin/env bash
set -e
./server1 &
pid1="$!"
./server2 &
pid1="$!"
wait "$1"
wait "$2"
2번 시도
위와 동일하지만 wait
pid를 지정하지 마십시오. 같은 행동을 하십시오.
...
pid2="$!"
wait
3번 시도
나는 서브 쉘을 사용하고 거기에서 종료하려고 시도했습니다. 그러나 이는 exit
서브셸에서만 작동하므로 두 가지 백그라운드 프로세스가 완료될 때까지 기다립니다.
#!/usr/bin/env bash
set -e
( ./server1 || echo crash1; exit 1 ) &
( ./server2 || echo crash2; exit 2 ) &
wait
Bash에서 이를 달성할 수 있는 방법이 있습니까(백그라운드에서 두 개의 서버 프로세스를 포크하고 그 중 하나가 완료되자마자 종료)?
답변1
wait -n
에서 help wait
:bash
이 옵션이 제공 되면
-n
다음 작업이 종료될 때까지 기다렸다가 종료 상태를 반환합니다.
사용할 때 wait -n
기다릴 것입니다다음작업이 종료되었습니다. 즉, 두 개의 백그라운드 작업 중 하나가 종료되면 호출이 wait -n
반환됩니다. 작업의 종료 상태는 의 종료 상태로 표시되지만 wait -n
어떤 작업이 종료되었는지는 알 수 없습니다.
-n
wait
옵션이 추가 되었습니다 bash-4.3-alpha
.