Linux / Bash,使用ps -o按特定名称获取进程?

时间:2010-09-24 20:52:58

标签: linux bash process

我正在尝试使用ps -o命令获取有关与特定名称匹配的进程的特定信息。但是,我遇到了一些问题,当我尝试使用它来获取所有进程时,就像这样,它只返回正常ps -ef将返回的子集(它几乎不会返回相同数量的结果,因此它不会返回所有正在运行的进程)

ps -ef -o pid,time,comm

我想尝试类似这样的事情(下面),但是将ps -o合并到其中以获取特定信息(仅限PID)

ps -ef |grep `whoami`| grep firefox-bin

对于如何正确执行此操作,我们非常感谢您的建议,谢谢

5 个答案:

答案 0 :(得分:93)

这将按名称获取进程的PID:

pidof name

然后您可以将其重新插入ps以获取更多详细信息:

ps -p $(pidof name)

答案 1 :(得分:25)

这有点旧,但我想你想要的是:ps -o pid -C PROCESS_NAME,例如:

ps -o pid -C bash

编辑:根据您期望的输出类型,pgrep会更优雅。据我所知,这是特定于Linux的,并且产生与上面类似的输出。例如:

pgrep bash

答案 2 :(得分:10)

ps -fC PROCESSNAME

ps和grep是一个危险的组合 - grep尝试匹配每一行的所有内容(因此太常见了:grep -v grep hack)。 ps -C不使用grep,它使用进程表进行精确匹配。因此,您将获得一个准确的列表:ps -fC sh而不是在线上找到每个进程。

答案 3 :(得分:4)

有时您需要按名称grep进程 - 在这种情况下:

add_filter('nav_menu_item_id', '__return_false');

示例输出:

ps aux | grep simple-scan

答案 4 :(得分:0)

抱歉,聚会晚了很多,但是我要在这里补充一下,如果您想捕获名称与搜索字符串相同的进程,则可以这样做

pgrep -x PROCESS_NAME

-x          Require an exact match of the process name, or argument list if -f is given.
             The default is to match any substring.

如果原始流程创建了子流程(在查询时可能是僵尸),而这些子流程在其原始名称前加上了原始流程的名称,并且您试图将其从结果中排除,则此功能非常有用。有许多执行此操作的UNIX守护程序。我的首选示例是 ninja-dev-sync