在Mac OS X中使用ps时,如何通过命令名选择进程


3

在Linux中,我使用 ps -C command_name 选择指定命令名的进程。但它在Mac OS X中不起作用。我仔细阅读了ps的手册页,但是找不到任何选项来执行此操作。

所以任何人都知道在Mac OS X中使用ps时是否有办法通过命令名选择指定的进程?


尝试 ps | grep command_name
Der Hochstapler

ps | grep command_name 将包括 ps | grep command_name 本身。
khotyn

1
ps | grep command_name | grep -v grep 是一个简单的解决方案。 / cc @oli
slhck

Answers:


2

在一般情况下,似乎你不能真正做到这一点,不使用grep作为辅助或管道/ shelling到第二个第二个linux命令来帮助。如果您尝试通过启动其他语言的流程来执行此操作,例如Java,您可能需要避免使用任何shellism,因此需要执行一个命令。因此考虑 p纤ep 作为备选。例如列出所有java进程:

pgrep java

1

一种简单的方法来过滤输出 ps 是使用一般可以过滤输入的工具, grep

要做到这一点,我们只是 的输出 ps 进入grep,就像这样:

oliver@cloud:~$ ps | grep bash
31131 pts/0    00:00:00 bash

如果你正在上市 所有 过程,你会很快遇到一个问题:

oliver@cloud:~$ ps a | grep bash
 2729 pts/0    S+     0:00 grep bash
31131 pts/0    Ss     0:00 -bash

现在它又回来了 grep 本身也是!我们该如何解决?

只需使用 grep 再次 ,过滤掉多余的结果:

oliver@cloud:~$ ps a | grep bash | grep -v grep
31131 pts/0    Ss     0:00 -bash

谢谢,@ slkch已经给出了这个答案,但无论如何我会接受你的。
khotyn

1

< -OSX->通过匹配二进制又名COMMAND名称获得运行二进制文件的PID,称为Humans。

helios:~TimberWolf $ killall -s人类

- >只是数字

helios:~TimberWolf $ killall -s Humans | tr -d [:alpha:] [:space:] -

- >使用带ps命令的PID可以获得更精细的细节,例如二进制的优先级。

helios:~TimberWolf $ ps killall -s Humans | tr -d [:alpha:][:space:]-


来自man killall:-s仅显示将要执行的操作,但不发送任何信号。
harschware

我使用你的命令的修改: killall -s Humans|awk '{print $3}'
Ikem Krueger

0

我遇到了同样的问题。这是一个解决方案,并不完全令人满意:

ps -p `pidof <command_name> | tr ' ' ','`

这不会一直有效(例如,当命令名实际上是对解释器的调用时),而且相当丑陋。我希望它可以提供想法并产生更好的解决方案!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.