我必须使用 ps -Af 命令来计算我远程使用的计算机上的 emacs 进程数。我该从哪里开始呢?
答案1
ps -Af
不是最好的方法。
该f
选项是多余的,如果非 emacs 进程使用 emacs 或包含它的字符串作为其参数之一,则可能会触发误报,更不用说名为 emacs 的用户(不太可能)的情况。
我建议使用这个更简单的命令:
pgrep emacs | wc -l
答案2
你可以做ps -C emacs --no-heading | wc -l
ps -C command
按命令名称输出进程
编辑:ps --help
非常有趣
答案3
正如 Hennes 所说,你可以使用“ ps -AF | grep emacs | wc -l
”来做到这一点。但你也会在那里拥有自己的命令。要删除此命令,您可以使用“ grep -v
”(或--inverted-match
)来过滤掉您不想计数的命令。所以它看起来像这样:ps -AF | grep emacs | grep -v grep | wc -l
答案4
从首要原则开始。
首先确定要求您使用的命令的具体用途,以及指定的选项 ( -Af
) 如何工作。为此,请阅读man ps
:
-A 选择所有进程。
-f 进行完整格式列表。此选项可以与许多其他 UNIX 样式选项结合使用以添加其他列。
因此,您的起点是为您的用户运行的所有进程的输出,以完整格式列出。在尝试进行任何处理之前运行命令以查看完整输出:
ps -Af
为了对emacs
进程进行计数,您需要通过过滤工具通过管道传输输出来处理输出和/或对相应的匹配进行计数。grep
是一个不错的选择,但为了效率和简单性,我会使用awk
:
ps -Af | awk '/emacs/ && !/awk/ { a++ } END { print a }'
这会搜索模式/emacs/
,排除搜索本身的模式 ,!/awk/
增加匹配项{ a++ }
,然后打印总计{ print a }
。
这只需要一个管道,并优雅地处理不返回计数中的搜索过程的问题。