如何检查进程是否存在而不返回失败的退出代码?

如何检查进程是否存在而不返回失败的退出代码?

我正在使用亚马逊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

相关内容