您的位置:首页 > 其它

一段查询自身是否已在运行的脚本test.sh,有些要注意到地方

2009-09-15 16:09 309 查看
#!/bin/bash

#必须有上面一行,否则ps显示的进程是bash,而不是test.sh

isprocrunning(){

echo "check $1 is running or not"

local p=`ps -C $1 -o pid=` #如果多个同名进程在运行,则$p如:"1111 2222"

for pid in $p; do

if [ $pid -ne $$ ]; then #检查ps到的进程是否为自己,必须这样做

echo "another proc $pid is running"

return 1

else

echo "local pid is $pid"

fi

done

return 0

}

#测试一下

isprocrunning `basename $0`

if [ $? -eq 1 ]; then

echo "is running"

sleep 10

else

sleep 20

fi

/////////////////////////////////////////////////////////////////

#另一段代码,

isprocrunning(){

local user=`whoami`
echo `ps -u root -f|grep $1|grep -v grep`
local procs=`ps -u $user -f |grep $1 |grep -v grep | gawk
'{print $2}'`
for pid in $procs; do
if [ $pid -ne $$ ]; then
echo $pid
return 1;
fi
done
return 0
}

#但是使用如下方式执行时会失败,总是显示脚本在运行

#原因是系统会启动一个子shell执行``中的函数,并且ps出来的父子shell进程的命令参数完全一样!

aa=`isprocrunning script_name`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: