이렇게하면 두 프로세스가 시작되고 첫 번째 프로세스가 끝날 때까지 기다렸다가 다른 프로세스를 종료합니다.
#!/bin/bash
{ cd ./frontend && gulp serve; } &
{ cd ./backend && gulp serve --verbose; } &
wait -n
pkill -P $$
작동 원리
스타트:
{ cd ./frontend && gulp serve; } &
{ cd ./backend && gulp serve --verbose; } &
위의 두 명령은 백그라운드에서 두 프로세스를 시작합니다.
기다림
wait -n
백그라운드 작업이 종료 될 때까지 기다립니다.
-n
옵션으로 인해 bash 4.3 이상이 필요합니다.
죽임
pkill -P $$
현재 프로세스가 상위 인 작업을 종료합니다. 즉, 여전히 실행중인 백그라운드 프로세스가 종료됩니다.
시스템 pkill
에이 없으면 다음 줄을 바꾸십시오.
kill 0
또한 현재 프로세스 그룹을 종료 합니다.
쉽게 테스트 가능한 예
스크립트를 변경하면 gulp
설치 하지 않아도 테스트 할 수 있습니다 .
$ cat script.sh
#!/bin/bash
{ sleep $1; echo one; } &
{ sleep $2; echo two; } &
wait -n
pkill -P $$
echo done
위의 스크립트는 그대로 실행될 수 있으며 bash script.sh 1 3
첫 번째 프로세스가 먼저 종료됩니다. 또는 하나를 실행할 수 있으며 bash script.sh 3 1
두 번째 프로세스가 먼저 종료됩니다. 두 경우 모두 원하는대로 작동 함을 알 수 있습니다.
gulp ./fronend/serve && gulp ./backend/serve --verbose
?