在生产环境下一个通信或者业务进程数量往往不止一个,下面这段shell,可以帮助你通过进程的名称获得其下的所有进程ID
代码如下:
#!/bin/bash
#如何根据进程名称获得进程
do_getpid()
{
ps -e |sed -e '/'$1'/!d
s/^ *\([0-9]*\).* \(.*\)$/\1 \2/
/'$1'/!d
s/ .*$//'
}
pid=`do_getpid $2`
echo $2
if test "${pid}" = ""
then
echo "no such processes"
exit 0
fi
case "$1" in
'-k')
echo $pid
kill -9 $pid
esac
case "$1" in
'-t')
echo $pid
kill -9 $pid
esac
case "$1" in
'-u1')
echo $pid
kill -30 $pid
esac
case "$1" in
'-l')
echo show $pid
;;
esac
case "$1" in
'-u')
echo $pid
kill -16 $pid
esac解释说明:
程序的关键是do_getpid()函数
ps -e|sed -e '/'$1'/!d':是将获得其余进程信息过滤掉
以bash进程为例,
ps -e|sed -e '/bash/!d' 显示如下:
3249 pts/1 00:00:00 bash
3683 pts/2 00:00:00 bash
4805 pts/6 00:00:00 bash
ps -e|sed -e '/bash/!d'|sed -e 's/^ *\([0-9]*\).* \(.*\)$/\1 \2/' (匹配到bash后,匹配以数个空格开头后接多个数字并存为标签1,后接多个字符,并将结尾任意多个字符存为标签2)
显示如下:
3249 bash
3683 bash
4805 bash
sed -e 's/ .*$//'则是将从空格开始到结束的所有字符用空代替,最终执行结果如下:
3249
3683
4805
程序整体(命名为pget)执行例子如下:
pget -l bash
输出结果为:
3249
3683
4805
本文介绍了一个Shell脚本,通过进程名称获取所有相关进程的ID。关键在于do_getpid()函数,利用`ps -e`结合`sed`命令筛选并提取进程ID,以bash进程为例,详细解析了脚本的执行过程。
1万+

被折叠的 条评论
为什么被折叠?



