我正在制作一个 python 程序,我计划通过 bash 脚本启动它。然而,当计算机尝试启动该程序两次时,该程序会表现得很糟糕。由于我实际上只需要启动该程序一次,因此如何判断该程序是否已在运行。
答案1
一种方法是记录 python 进程的 PID,然后/var/run
bash 脚本可以查看具有该 PID 的文件是否存在,以及是否存在该 PID 是否仍在运行。
另一种可能性是用来pgrep
查看进程是否正在运行,如果名称中有足够独特的部分(python 可能太常见而无法使用,但 py 脚本本身可能会工作)。例如:
if pgrep -f "python yourScript.py" &>/dev/null; then
echo "it is already running"
exit
else
python yourScript.py
fi
假设yourScript.py
会将自身守护进程或类似的东西
答案2
如果你的 bash 脚本被调用my_script.sh,然后将其添加到顶部:
#!/bin/bash
for pid in $(pidof -x my_script.sh); do
if [ $pid != $$ ]; then
exit 1
fi
done
python python_app.py
它将列出所有相关的 PIDmy_script.sh并验证它们是否与我们当前正在运行的进程相同。如果没有,则退出脚本。
答案3
尝试使用 ps -ef
#!/bin/bash
export me=`basename $0`
if [[ -n $(ps -ef | grep $1 | grep -v grep | grep -v $me) ]]; then
echo "the program is running";
else
echo "not running";
fi
答案4
锁定文件可能是一种更优雅的方法。当你的程序启动时,它会检查是否有锁,如果有,它就会停止。如果没有,它会创建一个并继续运行。
这也是一种有用的方法,可以让您了解程序在锁定文件上运行了多长时间。
前几天我正在研究这个问题,发现了这篇文章:确保只有 1 个 bash 脚本副本正在运行的最佳方法是什么?