如何测试后台作业在退出前是否失败?

如何测试后台作业在退出前是否失败?

我正在编写一个使用 Xvfb 启动虚拟帧缓冲区的脚本。我想确保命令成功,但我不希望脚本等到命令完成,因为 Xvfb 会继续运行,直到 X 服务器被终止。例如:

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

符号&是 a control operator,结束要测试的命令列表。根据该定义,以下内容是免费的句法错误:

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

问题是,通过后台命令Xvfb,测试结果将总是为零/真。

我会启动该过程,然后等待足够长的时间直到它消失,然后检查它是否仍然存在:

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

参考:

相关内容