从第一眼看,它看起来像一个非常简单的问题。
但谷歌没有帮助。
我想了解的是如何在Linux(CentOS)中使用命令行来查看多少进程正在运行?
不是"什么过程" - 但只是一般数量的正在运行的进程。
我的意思是 - 我们在shell中输入命令并得到类似
的答案总运行流程= 258
这就是全部。 谢谢你的提示!
答案 0 :(得分:1)
查看正在运行的进程数
ps -ef | wc -l
要查看哪些进程使用的CPU最多,请使用top
。
修改强>
要跟进pensnarik完全正确的评论,这里是完全正确的计数
psCount=$(ps -ef | wc -l)
# (( psCount -- ))
# if you don't want to count the `ps -ef`, then use this
(( psCount -= 2 ))
echo $psCount
请在您的Centos上测试,并将任何错误消息作为评论。我将写一个完整的bourne shell版本(如果我必须;-))。
IHTH
答案 1 :(得分:1)
shellter的答案几乎是正确的,但是请不要忘记在ps结果包含标题的情况下从结果中减去1:
[mutex@thinkpad 1c]$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Mar09 ? 00:00:02 /sbin/init
root 2 0 0 Mar09 ? 00:00:00 [kthreadd]
root 3 2 0 Mar09 ? 00:00:04 [ksoftirqd/0]
root 5 2 0 Mar09 ? 00:00:00 [kworker/0:0H]
root 7 2 0 Mar09 ? 00:00:21 [rcu_preempt]
root 8 2 0 Mar09 ? 00:00:00 [rcu_sched]
root 9 2 0 Mar09 ? 00:00:00 [rcu_bh]
答案 2 :(得分:1)
虽然它回答了问题,但处理ps -ef
输出并不是最佳的。
考虑到这里只关注输出行的数量,没有必要使用-f
选项,ps -e
就足够了。
如前所述,ps
输出摘要行,因此必须从行计数中减去。使用ps -eo pid=
。
如前所述,ps
命令本身也必须被减去,也许是wc
命令,如果shell不是shell函数,可能是运行脚本的shell。直接在命令行上运行。
以下是避免大多数问题的替代解决方案:
processCount() {
set $(echo /proc/[1-9]*)
echo Total running processes = $#
}
基于shell builtins(set
和echo
),它不会在子shell外部运行任何外部命令,因此应该更快并且使用更少的资源。
以下是它的工作原理:
第一行是设置参数列表,其中所有文件名都以/proc
目录下的数字开头。每个目录都对应一个进程。
第二行显示参数列表中的元素数量,这正是进程数。
如果您想在Schell脚本中计算它而不会弄乱参数列表,您可以使用这种稍微复杂的方法,它使用数组变量而不是参数列表:
set p=( $(echo /proc/[1-9]*) )
echo Total running processes = ${#p[@]}