終了する前にバックグラウンドジョブが失敗するかどうかをテストする方法は?

終了する前にバックグラウンドジョブが失敗するかどうかをテストする方法は?

私は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

引用:

関連情報