【问题标题】:How to give arguments to kill via pipe [duplicate]如何通过管道给出参数杀死[重复]
【发布时间】:2012-01-29 01:10:05
【问题描述】:

我需要搜索某个进程并终止该进程。我写了一个这样的命令:

ps -e | grep dmn | awk '{print $1}' | kill

其中进程名称为dmn。但它不起作用。如何按名称和kill 查找进程。

【问题讨论】:

    标签: linux bash shell command-line command-line-arguments


    【解决方案1】:

    你可以使用

    pkill dmn 
    

    如果您的系统有pkill command

    【讨论】:

    • +1 表示 pkill 而不是 killall。它可以在多个平台上使用,没有不同的“含义”(例如,Solaris 上的killall 相当于 Linux 上的killall5 - 也就是说,杀死 ALL 进程)
    【解决方案2】:
    kill $(ps -e | grep dmn | awk '{print $1}')
    

    【讨论】:

    • 使用较新的$() 语法:kill $(ps -e | grep dmn | awk '{print $1}')
    • fwiw 对于其他人,我不得不修改这个答案才能让它工作:kill $(ps -efw | grep dmn | grep -v grep | awk '{print $2}') 不知道为什么,也不太在意,请进一步研究。
    • @joshweir 这是因为否则kill 甚至试图杀死试图搜索模式的“grep”进程
    • 在每个 awk 之后是否都需要 \n,就像在 awk '{print $1"\n"}' 中一样?
    • 一如既往,avoid the useless grep; kill $(ps -e | awk '/dmn/ { print $1 }'(当然,也不要重新发明轮子:pkill dmn)。
    【解决方案3】:

    如果您要删除多个进程,您可以使用这个:

    ps -efw | grep dmn | grep -v grep | awk '{print $2}' | xargs kill
    

    注意:您需要从输出中删除 grep 进程本身,这就是使用 grep -v grep 的原因。

    【讨论】:

    • 您可以通过将第一个字符放在括号内来避免 grep 出现在您的 grep 中,例如:grep [d]mn
    • @Oldskool 不错的把戏。使用元字符使 grep 正则表达式与自身不匹配是个好主意。
    • @Oldskool,+1,你是个天才!
    • 不错的技巧,虽然它确实使转换为 shell 脚本变得更加复杂
    • kill: (15142): Operation not permitted 甚至在杀死之前添加 sudo
    【解决方案4】:

    你也可以使用killall:

    killall dmn
    

    【讨论】:

      【解决方案5】:
      for procid in $(ps -aux | grep "some search" | awk '{print $2}'); do kill -9 $procid; done
      

      你好朋友..我们可以使用 for 循环来做到这一点。

      “Some search”在这里是您要搜索的任何进程名称,例如“java”所以假设 java 进程的计数是 200+,所以一个一个地杀死将太典型了。

      所以你可以使用上面的命令。

      谢谢。

      【讨论】:

      • 搜索结果可能为空时的最佳解决方案
      【解决方案6】:

      只是添加其他内容,但我喜欢使用 awk 的正则表达式功能容量:

      kill $(ps | awk '/dmn/{print $1}')
      

      【讨论】:

        【解决方案7】:

        使用带有 -f 选项的 pgrepkill $(pgrep -f dmn)

        【讨论】:

        • 如果你有pgrep,为什么不只是pkill -f dmn
        【解决方案8】:

        如果您的系统上有 pidof 命令(我知道 ZSH 等 shell 默认情况下带有此命令,除非我弄错了),您可以执行类似的操作。

        kill -9 $(pidof dmn)
        

        【讨论】:

          【解决方案9】:

          你可能不需要pipe,如果你有pidof命令并且知道图像名称,我是这样做的:

          kill $(pidof synergyc)
          

          $() 我理解这一点,因为它将输出转换为 kill 可以使用的变量,基本上就像管道一样。比其他一些选项更简短、更容易理解,但也可能不太灵活和更直接。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-11-27
            • 1970-01-01
            • 2017-11-17
            • 2018-10-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多