Linux提取匹配指定字符串的进程号

本文介绍如何在Linux系统中精确查找并终止指定名称的进程。通过组合使用ps、grep和awk命令,可以有效地筛选出目标进程的PID,并避免误杀grep自身进程。适用于运维人员及脚本编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址: Linux提取匹配指定字符串的进程号

定个小目标

现在提出我们的需求:通常在运维过程中,会有一些进程是在后台运行的,这个时候我们如果 筛选出指定的进程,并kill掉 就是接下来要讨论的问题了。

尝试用 grep 和 awk 实现

现在有一个进程是通过 nohup java -jar ./CCNController-1.0.jar /router/pku/n1 & 命令启动并实现在后台运行的,我们接下来的目标就是要过滤出这个进程的进程号

  • 过滤出该进程

    ps -aux | grep CCNController
    

    得到如下结果(其中第一行是grep命令进程,第二行是目标进程)

    mingj     7078  0.0  0.0  14664  1084 pts/0    S+   09:32   0:00 grep CCNController
    mingj    14425  0.0  0.3 4767808 25940 ?       Sl   11月13   0:26 java -jar ./CCNController-1.0.jar /router/pku/n1
    
  • 用awk命令选出第二列的进程号

    ps -aux | grep CCNController | awk '{print $2}'
    

    得到如下结果

    8946
    14425
    
  • 接下来就是kill掉过滤出的进程

    kill $(ps -aux | grep CCNController | awk '{print $2}')
    

    得到如下结果

    bash: kill: (9171) - 没有那个进程
    

    实际上,我们要kill掉的目标进程已经成功被杀掉了,报这一行错误是因为我们用上面的命令筛选出的进程号有两个,一个是目标进程号,一个是筛选命令中包含的grep命令的执行进程的,实际上grep命令在筛选命令执行结束的时候就已经退出了。我们再去kill一个已经退出的进程号,当然会报错。

    如果我们只是想要在终端kill某个进程,这样做就ok了,但是我们如果用在一些脚本编程当中(比如用ssh远程执行命令的脚本),会导致脚本中断执行,接下来我们的任务是 将筛选结果中grep命令的进程去除掉 => 喜大普奔,grep命令中有一个 -v 参数可以排除包含指定字符串的行

最终实现

  • 查询

    ps -aux | grep CCNController | grep -v grep | awk '{print $2}'
    
  • 查询并删除

    kill$(ps -aux | grep CCNController | grep -v grep | awk '{print $2}')
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值