종료하기 전에 백그라운드 작업이 실패하는지 테스트하는 방법은 무엇입니까?

종료하기 전에 백그라운드 작업이 실패하는지 테스트하는 방법은 무엇입니까?

저는 Xvfb를 사용하여 가상 프레임 버퍼를 시작하는 스크립트를 작성 중입니다. 명령이 성공하는지 확인하고 싶지만 X 서버가 종료될 때까지 Xvfb가 계속 실행되기 때문에 명령이 완료될 때까지 스크립트가 기다리지 않기를 바랍니다. 예를 들어:

if ! Xvfb $DISPLAY &; then
    echo 'Error: failed to create virtual frame buffer'
    exit 1
fi

xpid=$!

# do stuff that uses frame buffer

kill $xpid

문제는 구문 오류가 발생한다는 것입니다 &;.

$ stuff.sh 
stuff.sh: line 149: syntax error near unexpected token `;'
stuff.sh: line 149: `if ! Xvfb $DISPLAY &; then'

줄을 다음으로 변경하려고 시도했지만 if ! Xvfb $DISPLAY & ;여전히 오류가 발생합니다.

답변1

기호 &control operator테스트할 명령 목록을 끝내는 입니다. 이 정의에 따르면 다음은 무료입니다.통사론실수:

if ! Xvfb $DISPLAY & then
    echo 'Error: failed to create virtual frame buffer'
    exit 1
fi

문제는 백그라운드 명령을 사용하면 Xvfb테스트 결과가 다음과 같다는 것입니다.언제나0/참입니다.

프로세스를 시작한 다음 사라질 때까지 기다렸다가 아직 남아 있는지 확인합니다.

Xvfb $DISPLAY &
xvfbpid=$!
sleep 3 ## adjust to taste
if ! ps -p $xvfbpid > /dev/null
then
  echo 'Error: failed to create virtual frame buffer'
  exit 1
fi

인용하다:

관련 정보