如何通过管道给出参数杀死[重复]

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 选项的 pgrepkill $(pgrep -f dmn)

【讨论】:

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

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

kill -9 $(pidof dmn)

【讨论】:

【参考方案9】:

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

kill $(pidof synergyc)

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

【讨论】:

以上是关于如何通过管道给出参数杀死[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 bash 命令的输出(带管道)作为另一个命令的参数

通过sed管道输出但保留退出状态[重复]

“没有给出与所需形式参数相对应的参数”-尝试测试OOP继承时[重复]

如何跟踪来自 Vertex AI 管道的参数和指标

TypeError: __init__() 接受 2 个位置参数,但给出了 3 个 // 链接列表 [重复]

如何使用 Sklearn 管道进行参数调整/交叉验证?