我一直在寻找通过Linux命令行查找具有相同名称的正在运行的进程数的最佳方法。例如,如果我想找到运行的bash进程数并获得“5”。目前我有一个脚本执行'pidof',然后计算标记化的字符串。这工作正常但我想知道是否有更好的方法可以完全通过命令行完成。在此先感谢您的帮助。
答案 0 :(得分:52)
在pgrep
可用的系统上,-c
选项返回与给定名称匹配的进程数
pgrep -c command_name
请注意,这是grep
- 样式匹配,不是完全匹配,因此例如pgrep sh
也会匹配bash
个进程。如果您想要完全匹配,请使用-x
选项。
如果pgrep
不可用,您可以使用ps
和wc
。
ps -C command_name --no-headers | wc -l
-C
的{{1}}选项将ps
作为参数,程序将打印一个有关可执行文件名与给定命令名匹配的进程的信息表。这是完全匹配,而不是command_name
- 样式。 grep
选项会抑制表格的标题,这些标题通常作为第一行打印。使用--no-headers
,每个进程匹配一行。然后--no-headers
计算并打印输入中的行数。
答案 1 :(得分:11)
result=`ps -Al | grep command-name | wc -l`
echo $result
答案 2 :(得分:7)
ps -Al | grep -c bash
答案 3 :(得分:5)
您可以尝试:
ps -ef | grep -cw [p] rocess_name
OR
ps aux | grep -cw [p] rocess_name
例如:
ps -ef | grep -cw [i] nit
答案 4 :(得分:3)
上面的一些内容对我不起作用,但是他们在我的路上帮助了我。
ps aux | grep [j]ava -c
对于新手Linux:
ps aux
打印所有当前正在运行的进程,grep
搜索与 java 一词匹配的所有进程,[]
括号删除刚刚运行的进程因此它不会将其作为一个正在运行的进程包含在内,最后-c
选项代表count。
答案 5 :(得分:2)
列出所有流程名称,排序和计数
ps --no-headers -A -o comm | sort | uniq -c
您还可以列出附加到tty的进程
ps --no-headers a -o comm | sort | uniq -c
您可以使用以下内容进行过滤:
ps --no-headers -A -o comm | awk '{ list[$1] ++ } END { for (i in list) { if (list[i] > 10) printf ("%20s: %s\n", i, list[i]) } }'
答案 6 :(得分:1)
以下bash脚本可以作为cron作业运行,如果任何进程过于自负,您可能会收到电子邮件。
for i in `ps -A -o comm= --sort=+comm | uniq`;
do
if (( `ps -C $i --no-headers | wc -l` > 10 )); then
echo `hostname` $i `ps -C $i --no-headers | wc -l` ;
fi
done
将10替换为您的关注点数。
TODO:“10”也可以作为命令行参数传递。此外,很少有系统进程可以放入例外列表中。
答案 7 :(得分:0)
您可以将ps
(将显示进程的快照)与wc
(将统计字数,wc -l
选项将统计行数,即换行符)一起使用。
这很容易记住。
ps -e | grep processName | wc -l
此简单命令将打印当前服务器上正在运行的进程数。
如果要查找当前服务器上当前用户正在运行的进程数,请使用-U
的{{1}}选项。
ps
使用用户名更改root。
但是,正如许多其他答案中提到的那样,您也可以使用ps -U root | grep processName | wc -l
,这是一种更优雅的方式。
答案 8 :(得分:0)
ps aux | wc -l
此命令显示所有用户在系统上运行的进程数。
对于特定用户,您可以使用以下命令:
ps -u <username> | wc -l
在运行前用实际的用户名替换:)