【发布时间】:2025-11-24 16:55:02
【问题描述】:
GNU bash,版本 1.14.7(1)
我有一个脚本叫做“abc.sh”
我必须从abc.sh 脚本中检查这个...
在里面我写了以下声明
status=`ps -efww | grep -w "abc.sh" | grep -v grep | grep -v $$ | awk '{ print $2 }'`
if [ ! -z "$status" ]; then
echo "[`date`] : abc.sh : Process is already running"
exit 1;
fi
我知道这是错误的,因为每次它退出时都会在“ps”中找到自己的进程
如何解决?
如何检查脚本是否已在运行,仅from that script?
【问题讨论】:
-
运行进程的PID保存在$$中,从列表中忽略 grep -v $$
-
使用一些锁文件比较简单。如果文件存在,另一个副本正在运行。只需确保文件已被删除。
-
在我的情况下检查文件的方法不安全..所以我想使用这种方式
-
这个脚本有什么问题?似乎是正确的,您忽略了当前进程的 PID,只检查是否有任何其他 abc.sh 进程。
标签: bash shell concurrency