如何知道正在运行多少进程?

时间:2015-03-10 20:19:40

标签: shell process centos

从第一眼看,它看起来像一个非常简单的问题。

但谷歌没有帮助。

我想了解的是如何在Linux(CentOS)中使用命令行来查看多少进程正在运行?

不是"什么过程" - 但只是一般数量的正在运行的进程。

我的意思是 - 我们在shell中输入命令并得到类似

的答案

总运行流程= 258

这就是全部。 谢谢你的提示!

3 个答案:

答案 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(setecho),它不会在子shell外部运行任何外部命令,因此应该更快并且使用更少的资源。

以下是它的工作原理:

  • 第一行是设置参数列表,其中所有文件名都以/proc目录下的数字开头。每个目录都对应一个进程。

  • 第二行显示参数列表中的元素数量,这正是进程数。

如果您想在Schell脚本中计算它而不会弄乱参数列表,您可以使用这种稍微复杂的方法,它使用数组变量而不是参数列表:

set p=( $(echo /proc/[1-9]*) )
echo Total running processes = ${#p[@]}