【问题标题】:How to get total running process count and thread count in Linux using Python?如何使用 Python 在 Linux 中获取总运行进程数和线程数?
【发布时间】:2019-02-08 12:45:56
【问题描述】:

我可以使用终端命令获取总进程数。 我已经尝试了以下进程计数命令-

ps aux | wc -l

对于线程数 -

ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END " "{ print num_threads }'

但我不想使用终端命令,因为它在我当前的项目中是不允许的,是否有任何 API 或其他方法可以在不调用终端的情况下获取此信息。

我曾尝试使用 threading 包,但它在进程级别显示,我得到的输出为 1

我尝试了 psutil,但它提供了单个进程的信息。

附加信息

OS - Ubuntu 16
Python 3.7.2

【问题讨论】:

    标签: python linux process


    【解决方案1】:

    试试这个:

    如果你打算用一个大的 shell 命令来完成这一切,只需将 -c 参数添加到 grep,这样它就会为你提供行数而不是实际行数:

    ps uaxw |grep python |grep -v grep
    

    当然,您可以通过添加 | 来使这更复杂。 wc -l 到最后,或者通过数 Python 中的行数,但是为什么呢?

    另外,为什么还要涉及外壳?您可以像运行 grep 一样轻松地在 Python 中进行搜索,然后您就不会遇到意外创建了一个 grep 进程的问题,该进程 ps 会重复匹配您的搜索,然后需要 grep -v 将其退出:

    procs = subprocess.check_output(['ps', 'uaxw']).splitlines()
    kms_procs = [proc for proc in procs if 'kms' in proc]
    count = len(kms_procs)
    

    或者,更简单地说,不要让 ps 给你一大堆你不想要的信息,然后想办法忽略它,只需要你想要的信息:

    procs = subprocess.check_output(['ps', '-a', '-c', '-ocomm=']).splitlines()
    count = procs.count('kms')
    

    或者,更简单的是,安装 psutil,甚至不尝试运行子进程并解析它们的输出:

    count = sum(1 for proc in psutil.process_iter() if proc.name() == 'kms')
    

    【讨论】:

    • 谢谢,但它不起作用,这里的“kms”是什么?我尝试执行上述解决方案,我得到 0 然后我尝试调试并发现没有任何称为“kms”的东西。我在终端上执行 ps -uaxw 搜索“kms”,但没有。
    • 就像我的情况一样,它是一个过程,所以我已经检查过了
    • 你能把它作为经过验证的答案
    • 我尝试 count = sum(1 for proc in psutil.process_iter() 使用这部分来获取总进程数,而我在使用 subprocess 时得到了 197 。我得到了 201。这可能是因为 subprocess 还增加了 4 个进程吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多