두 개의 백그라운드 명령이 주어지면 둘 중 하나가 종료 될 때 나머지 명령을 종료합니다.

어쩌구 238

두 서버를 시작하는 간단한 bash 스크립트가 있습니다.

#!/bin/bash
(cd ./frontend && gulp serve) & (cd ./backend && gulp serve --verbose)

두 번째 명령이 종료되면 첫 번째 명령이 계속 실행되는 것 같습니다.

두 명령 중 하나가 종료되면 다른 명령이 종료되도록 어떻게 변경할 수 있습니까?

백그라운드 프로세스의 오류 수준은 종료 여부 만 확인할 필요가 없습니다.

John1024

이것은 두 프로세스를 시작하고 첫 번째 프로세스가 완료 될 때까지 기다린 다음 다른 프로세스를 종료합니다.

#!/bin/bash
{ cd ./frontend && gulp serve; } &
{ cd ./backend && gulp serve --verbose; } &
wait -n
pkill -P $$

작동 원리

  1. 스타트:

    { cd ./frontend && gulp serve; } &
    { cd ./backend && gulp serve --verbose; } &
    

    위의 두 명령은 백그라운드에서 두 프로세스를 모두 시작합니다.

  2. 기다림

    wait -n
    

    백그라운드 작업이 종료 될 때까지 기다립니다.

    -n옵션 때문에 bash 4.3 이상이 필요합니다.

  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같이 실행할 수 있으며 두 번째 프로세스가 먼저 종료됩니다. 어느 경우 든 이것이 원하는대로 작동 함을 알 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관