Como posso testar se um trabalho em segundo plano falhou antes de sair?

3

Estou escrevendo um script que lança um framebuffer virtual com Xvfb. Eu quero ter certeza de que o comando seja bem-sucedido, mas não quero que o script aguarde até que o comando seja concluído, porque o Xvfb continua em execução até o servidor X ser eliminado. Por exemplo:

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

xpid=$!

# do stuff that uses frame buffer

kill $xpid

O problema é que isso gera um erro de sintaxe em &; :

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

Eu tentei alterar essa linha para if ! Xvfb $DISPLAY & ; , mas ele ainda gera o erro.

    
por David Kennedy 09.07.2018 / 18:51

1 resposta

6

O símbolo & é um control operator e termina a lista de comandos a serem testados. Seguindo essa definição, o seguinte está livre de erros sintaxe :

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

O problema é que, colocando em segundo plano o comando Xvfb , o resultado do teste sempre será zero / verdadeiro.

Eu começaria o processo, depois esperaria o tempo suficiente para que ele morresse e, em seguida, verifique se ainda está por aí:

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

Referências:

por 09.07.2018 / 19:41