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

#!/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`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值