查询某个名字进程的pid shell函数如下: 函数成功会返回当前进程的pid,如果不在该进程返回null,没有传入程序名称返回-1 #!/bin/sh GetPidByCommand(){ if [ ! -n "${1}" ] then echo "-1" fi
ptop=$(top -n 1 |grep "${1}" |grep -v "grep ${1}")
pid=""
startpos=0
stringlen=${#ptop}
startstatus=0
while [ 1 ]
do
if [ ${startpos} -ge ${stringlen} ]
then
break
fi
currchar=${ptop:${startpos}:1}
if [ "${currchar}" = "0" ] || [ "${currchar}" = "1" ] || [ "${currchar}" = "2" ] || [ "${currchar}" = "3" ] || [ "${currchar}" = "4" ] || [ "${currchar}" = "5" ] || [ "${currchar}" = "6" ] || [ "${currchar}" = "7" ] || [ "${currchar}" = "8" ] || [ "${currchar}" = "9" ]
then
if [ ${startstatus} -eq 0 ]
then
startstatus=1
fi
pid=${pid}${currchar}
elif [ ${startstatus} -eq 1 ]
then
break
fi
startpos=$(expr ${startpos} + 1 )
done
echo ${pid}
}
pid=$(GetPidByCommand "Test001")
echo "Test001 pid = ${pid}"
exit 0
最后发现:pgrep -f "XXX"可以搞定 囧 Usage: pgrep [-flnovx] [-s SID|-P PPID|PATTERN]
Display process(es) selected by regex PATTERN
-l Show command name too
-f Match against entire command line
-n Show the newest process only
-o Show the oldest process only
-v Negate the match
-x Match whole name (not substring)
-s Match session ID (0 for current)
-P Match parent process ID