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