如何通过管道给出参数杀死[重复]
Posted
技术标签:
【中文标题】如何通过管道给出参数杀死[重复]【英文标题】: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
查找进程。
【问题讨论】:
【参考方案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 选项的 pgrep
。
kill $(pgrep -f dmn)
【讨论】:
如果你有pgrep
,为什么不只是pkill -f dmn
?【参考方案8】:
如果您的系统上有 pidof
命令(我知道 ZSH 等 shell 默认情况下带有此命令,除非我弄错了),您可以执行类似的操作。
kill -9 $(pidof dmn)
【讨论】:
【参考方案9】:你可能不需要pipe
,如果你有pidof
命令并且知道图像名称,我是这样做的:
kill $(pidof synergyc)
$()
我理解这一点,因为它将输出转换为 kill 可以使用的变量,基本上就像管道一样。比其他一些选项更简短、更容易理解,但也可能不太灵活和更直接。
【讨论】:
以上是关于如何通过管道给出参数杀死[重复]的主要内容,如果未能解决你的问题,请参考以下文章
“没有给出与所需形式参数相对应的参数”-尝试测试OOP继承时[重复]