我一直在寻找最好的方法来通过Linux中的命令行find具有相同名称的正在运行的进程的数量。 例如,如果我想find正在运行的bash进程的数量并获得“5”。 目前我有一个脚本,做一个“pidof”,然后做记号string计数。 这工作正常,但我想知道是否有一个更好的方式,可以完全通过命令行完成。 在此先感谢您的帮助。
命令行参数的Shell脚本密码安全性
命令从Shell脚本工作,但不是从命令行?
什么是正确的batch file语法?
Mercurial / extdiff不会改变为临时目录(正如我认为它应该)
如何清除Windows命令行中的最后一行?
在pgrep可用的系统上, -c选项返回与给定名称匹配的进程数的计数
pgrep -c command_name
请注意,这是grep风格的匹配,而不是完全匹配,所以例如pgrep sh也将匹配bash进程。 如果你想要一个完全匹配,也可以使用-x选项。
如果pgrep不可用,可以使用ps和wc 。
ps -C command_name --no-headers | wc -l
ps的-C选项将command_name作为参数,程序将打印一个关于进程的可执行文件名与给定命令名相匹配的信息表。 这是一个完全匹配,而不是grep -style。 --no-headers选项禁止通常作为第一行打印的表格的标题。 使用--no-headers ,每个进程匹配一行。 然后wc -l计数并打印输入中的行数。
result=`ps -Al | grep command-name | wc -l` echo $result
ps -Al | grep -c bash
上面的一些不适合我,但是他们帮助我走上了这条路。
ps aux | grep [j]ava -c
对于新手到Linux:
ps aux打印所有当前正在运行的进程, grep搜索匹配单词java的所有进程, []括号删除刚刚运行的进程,因此不会将其作为正在运行的进程,最后-c选项表示count。
@H_404_37@你可以试试 :
ps -ef | grep -cw [p] rocess_name
要么
ps aux | grep -cw [p] rocess_name
@H_404_37@例如:
ps -ef | grep -cw [i] nit
列出所有进程名称,排序和计数
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: %sn",i,list[i]) } }'
以下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”也可以作为命令行参数传递。 而且,很少系统进程可以放入例外列表。
我不知道其他发行版是什么,但在Ubuntu上,它是:
nproc
nproc是coreutils一部分。 所以,它应该在大多数Linux发行版上可用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。