在 Mac OS X 中使用 ps 时如何按命令名称选择进程

在 Mac OS X 中使用 ps 时如何按命令名称选择进程

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

那么有人知道在 Mac OS X 中使用 ps 时是否有办法通过命令名称选择指定的进程吗?

答案1

在一般情况下,如果不使用 grep 作为辅助或通过管道/shell 连接到第二个 linux 命令来提供帮助,似乎无法真正做到这一点。如果您尝试通过从其他语言(例如 Java)启动进程来执行此操作,则可能需要避免使用任何 shellisms,因此需要用一个命令来执行此操作。因此请考虑程序包作为替代方案。例如,列出所有 java 进程:

pgrep java

答案2

过滤输出的一个简单方法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

答案3

<- OSX -> 通过匹配二进制文件(又名命令名称)来获取名为 Humans 的正在运行的二进制文件的 PID。

helios:~TimberWolf$ killall -s 人类

-> 仅数字

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

-> 使用 PID 和 ps 命令来获取更精细的细节,例如二进制的优先级。

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

答案4

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

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

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

相关内容