从 ps -ef |grep 关键字获取 pid

Posted

技术标签:

【中文标题】从 ps -ef |grep 关键字获取 pid【英文标题】:Getting pids from ps -ef |grep keyword 【发布时间】:2011-12-28 13:12:38 【问题描述】:

我想使用ps -ef | grep "keyword" 来确定一个守护进程的pid(在它的ps -ef 的输出中有一个唯一的字符串)。

我可以用pkill keyword 杀死进程有没有返回pid 而不是杀死它的命令? (pidof 或 pgrep 不起作用)

【问题讨论】:

【参考方案1】:

只要包含-f 选项,您可以使用pgrep。这使得pgrep 匹配整个命令(包括参数)中的关键字,而不仅仅是进程名称。

pgrep -f keyword

来自man page:

-f      该模式通常仅与进程名称匹配。当设置-f 时,使用完整的命令行。


如果你真的想避免 pgrep,试试:

ps -ef | awk '/[k]eyword/print $2'

注意关键字第一个字母周围的[]。这是避免匹配awk 命令本身的有用技巧。

【讨论】:

ps 被过度使用,而 pgrep 使用不足。感谢您的帖子。 传递输出杀死的一种方法是:kill -9 `pgrep -f keyword` 这个答案是有史以来最好的。 这么我在ps aux | grep chrome上浪费了很多时间 不得不对pgrep -f 使用[k] 技巧。我的脚本在子 shell 中运行,所以我认为它正在获取它的父命令(很难确定 - 当命令执行完成时它返回的 pid 消失了!) @Kris 对于这个用例不会更直接地使用pkill -9 -f keyword?【参考方案2】:

试试

ps -ef | grep "KEYWORD" | awk 'print $2'

该命令应该为您提供带有 KEYWORD 的进程的 PID。在这种情况下,awk 从输出返回第二列中的内容。

【讨论】:

因为这可以返回多个 pid,您可以通过附加 | head -1 来获得第一个。 'head -1' 在某些 linux 中会返回 grep PID,应该是 tail -1。【参考方案3】:

ps -ef | grep KEYWORD | grep -v grep | awk 'print $2'

【讨论】:

可能是错字? ps -ef | grep 关键字 | grep -v grep | awk 'print $2' 你知道如何将返回的 PID 传递给“kill -9”吗?! @alybadawy 只需在末尾添加| xargs kill -9【参考方案4】:

这在 linux 上可用:pidof 关键字

【讨论】:

【参考方案5】:

我用

ps -C "keyword" -o pid=

这个命令应该给你一个 PID 号。

【讨论】:

【参考方案6】:

要通过特定关键字终止进程,您可以在 ~/.bashrc (linux) 或 ~/.bash_profile (mac) 中创建别名。

alias killps="kill -9 `ps -ef | grep '[k]eyword' | awk 'print $2'`"

【讨论】:

完美!在| head -1 的末尾添加一个管道,这一切都很好而且整洁。

以上是关于从 ps -ef |grep 关键字获取 pid的主要内容,如果未能解决你的问题,请参考以下文章

找出占用高的进程

Linux运维必知:如何从其 PID 中查找进程名称

杀死僵死进程

进程管理

linux shell编程 根据端口获取进程pid 直接用命令netstat -anp grep 端口号 在shell中如何获取PID?

Linux应急响应