如何根据进程名称获得所有进程ID

本文介绍了一个Shell脚本,通过进程名称获取所有相关进程的ID。关键在于do_getpid()函数,利用`ps -e`结合`sed`命令筛选并提取进程ID,以bash进程为例,详细解析了脚本的执行过程。

在生产环境下一个通信或者业务进程数量往往不止一个,下面这段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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值