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

Ric*_*ick 59 linux bash process

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

ps -ef -o pid,time,comm
Run Code Online (Sandbox Code Playgroud)

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

ps -ef |grep `whoami`| grep firefox-bin
Run Code Online (Sandbox Code Playgroud)

对于如何正确地做到这一点,任何建议都表示赞赏,谢谢

Ale*_*sky 96

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

pidof name
Run Code Online (Sandbox Code Playgroud)

然后您可以将其插回到ps以获取更多详细信息:

ps -p $(pidof name)
Run Code Online (Sandbox Code Playgroud)

  • 也可以使用`pgrep`,但它们的工作方式存在一些差异.例如,在我运行apache2的系统上,`pidof`会找到"apache2"而不是"apache",而`pgrep`会找到它. (6认同)
  • OS X人:`brew install pidof` (4认同)

h7r*_*h7r 26

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

ps -o pid -C bash
Run Code Online (Sandbox Code Playgroud)

编辑:依靠你期望的那种输出,pgrep会更优雅.据我所知,这是特定于Linux的,并且产生与上面类似的输出.例如:

pgrep bash
Run Code Online (Sandbox Code Playgroud)

  • `pgrep`不是特定于Linux的,因为它是在Solaris中引入的,后来在Linux和*BSD下重新实现. (3认同)

Ger*_*hes 11

ps -fC PROCESSNAME
Run Code Online (Sandbox Code Playgroud)

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

  • 这虽然不适用于Mac.Mac似乎没有以同样的方式使用`-C`,你知道怎么在mac上这样做吗?谢谢! (2认同)

use*_*385 5

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

ps aux | grep simple-scan
Run Code Online (Sandbox Code Playgroud)

示例输出:

simple-scan  1090  0.0  0.1   4248  1432 ?        S    Jun11   0:00
Run Code Online (Sandbox Code Playgroud)