我正在通过 bash 脚本根据文件中存储的 PID 检查进程是否正在运行。当文件不存在时,我收到上面显示的错误,因为命令正在尝试访问该文件并检查 PID 是否真的存在,所以这是正常的,但如果可能的话,我想避免这种情况。
有这样的办法吗?
我正在使用的命令如下所示。
如果杀死-0 $(cat“$pid_file”)
先感谢您。
答案1
[[ -f "$pid_file ]] && (cat "$pid_file" | head -n 1 | tr -d "\n")
此命令将返回非零状态。如果您想要“始终返回零”(牺牲易读性):
[[ ! -f "$pid_file ]] || (cat "$pid_file" | head -n 1 | tr -d "\n")
答案2
您需要一个条件来检查文件是否存在,如果您不想在尝试kill
不再存在的 PID 时看到任何错误,请将其重定向stderr
到/dev/null
。您最终会得到类似以下内容:
PID_EXISTS=$([[ -f "$pid_file" ]] && kill -0 $(<"$pid_file") 2> /dev/null && echo 1 || echo 0)
这将存储1
现有的 pid 和0
不存在的 pid。您可以在比较中使用该变量,例如:
if [[ $PID_EXISTS -eq 1 ]]; then echo FOUND; else echo NOTFOUND; fi
或者仅打印其结果:
echo $PID_EXISTS
不cat
。喵!
答案3
或者,你也可以改用pgrep
:
if pgrep -F "$pid_file" &>/dev/null; then
echo yep
else
echo nope
fi