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

原文地址: 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}')
    
发布了55 篇原创文章 · 获赞 29 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_33215972/article/details/84061418