![如何检查进程是否存在而不返回失败的退出代码?](https://linux22.com/image/7038/%E5%A6%82%E4%BD%95%E6%A3%80%E6%9F%A5%E8%BF%9B%E7%A8%8B%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8%E8%80%8C%E4%B8%8D%E8%BF%94%E5%9B%9E%E5%A4%B1%E8%B4%A5%E7%9A%84%E9%80%80%E5%87%BA%E4%BB%A3%E7%A0%81%EF%BC%9F.png)
我正在使用亚马逊Linux。我想启动一个进程,前提是该进程尚未运行。这是我嵌入 Jenkins Maven 作业中的 bash 脚本。所以我有
pids=$(pidof /usr/bin/Xvfb)
if [ ! -n "$pids" ]; then
Xvfb :0 -screen 5 1024x768x8 &
fi
不幸的是,如果没有进程,“pids=$(pidof /usr/bin/Xvfb)”行将返回失败的退出代码,并且后面的任何其他行都不会执行。有没有一种方法可以编写上述内容,这样就不会返回失败的退出代码?
答案1
如果您在 下运行set -e
,请|| true
在命令后添加以忽略该命令的失败。
pids=$(pidof /usr/bin/Xvfb || true)
if [ ! -n "$pids" ]; then
Xvfb :0 -screen 5 1024x768x8 &
fi
但由于pidof
如果没有找到进程,则返回非零状态,因此您可以直接测试其返回状态,而不是检查其输出是否为空。
if ! pidof /usr/bin/Xvfb >/dev/null 2>&1; then
Xvfb :0 -screen 5 1024x768x8 &
fi