如何通过管道给出参数kill

use*_*879 68 linux bash shell command-line command-line-arguments

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

ps -e | grep dmn | awk '{print $1}' | kill
Run Code Online (Sandbox Code Playgroud)

进程名称的位置dmn.但它没有用.如何按名称和kill它们查找进程.

Dan*_*son 132

kill $(ps -e | grep dmn | awk '{print $1}')
Run Code Online (Sandbox Code Playgroud)

  • 使用较新的`$()`语法:`kill $(ps -e | grep dmn | awk'{print $ 1}')`. (7认同)
  • fwiw为其他人,我不得不修改这个答案让它工作:`kill $(ps -efw | grep dmn | grep -v grep | awk'{print $ 2}')`不确定为什么,也不在乎太在意进一步. (5认同)
  • 一如既往,[避免无用的 `grep`](http://www.iki.fi/era/unix/award.html#grep); `kill $(ps -e | awk '/dmn/ { print $1 }'` (当然,也不要重新发明轮子:`pkill dmn`)。 (4认同)
  • @joshweir 这是因为否则 `kill` 甚至试图杀死试图搜索模式的 'grep' 进程 (2认同)

jco*_*ado 41

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

ps -efw | grep dmn | grep -v grep | awk '{print $2}' | xargs kill
Run Code Online (Sandbox Code Playgroud)

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

  • 你可以通过将第一个char放在括号内来避免grep出现在grep中,例如:grep [d] mn (17认同)

unu*_*tbu 15

你可以用

pkill dmn 
Run Code Online (Sandbox Code Playgroud)

如果您的系统有pkill命令.

  • +1 表示 pkill 而不是 killall。它可以在多个平台上使用,没有不同的“含义”([killall](http://bama.ua.edu/cgi-bin/man-cgi?killall) 在 Solaris 上相当于 [killall5](http://linux. die.net/man/8/killall5) 例如在 Linux 上 - 即杀死 *ALL* 进程) (2认同)

ped*_*ton 5

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

kill $(ps | awk '/dmn/{print $1}')
Run Code Online (Sandbox Code Playgroud)


Nat*_* F. 5

如果你pidof的系统上有这个命令(我知道像 ZSH 这样的 shell 默认带有这个命令,除非我弄错了),你可以做类似的事情。

kill -9 $(pidof dmn)
Run Code Online (Sandbox Code Playgroud)


小智 5

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

kill $(pidof synergyc)
Run Code Online (Sandbox Code Playgroud)

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