美文网首页
Linux提取匹配指定字符串的进程号

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

作者: SunnyQjm | 来源:发表于2018-11-14 09:54 被阅读0次

    原文地址: 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}')
      

    相关文章

      网友评论

          本文标题:Linux提取匹配指定字符串的进程号

          本文链接:https://www.haomeiwen.com/subject/hejdfqtx.html