python - 如何使用 Python 在 Linux 中获取总运行进程数和线程数?

标签 python linux process

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

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

最佳答案

试试这个:

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

ps uaxw |grep python |grep -v grep

当然,您可以通过添加一个 | 使它变得更复杂wc -l 到最后,或者通过计算 Python 中的行数,但是为什么呢?

或者,为什么还要涉及 shell?您可以像运行 grep 一样轻松地在 Python 中进行搜索——这样您就不会遇到意外创建一个 grep 进程的问题,该进程将在匹配您的搜索时重复执行,然后需要 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')

关于python - 如何使用 Python 在 Linux 中获取总运行进程数和线程数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54592792/

相关文章:

linux - 命令 'md5sum' 最后没有 '-' token

android - 如何杀死一个进程?

javascript - NodeJs - 检查子进程是否成功启动

macos - 如何创建 Mac OS 应用程序的内存转储

python - 如何使用 API 或 python 包获取所有 azure vm 实例的配置

python - 正则表达式:如何匹配没有连续元音的单词?

python - 让 Pyinstaller 识别 Kivy Garden Matplotlib 模块的路径

python - 遍历 Selenium 中的表行(Python)

centos 6.8错误上的android sdk构建工具25

linux - 无法安装 apache dpkg 被中断