Python 一分钟内创建了多少个进程?

Python 一分钟内创建了多少个进程?,python,linux,process,Python,Linux,Process,我想知道Linux内核在运行期间创建了多少个进程 一段时间 通常在一分钟内 我的背景:如果一分钟内创建了太多进程,那么就有问题了。我们的大部分遗留代码库都是从shell迁移到python的,但有时仍然有一些shell脚本速度较慢,因为它们需要很多进程 我想从这个数字创建一个图表。然后我想检查一下哪个主机以及为什么创建了这么多进程 我想用Python实现这一点 回答如何从/proc或/sys中读取这些内容将非常好 如果该解决方案适用于达到pid_max时发生的环绕,那就太好了 限制(pid的最大数

我想知道Linux内核在运行期间创建了多少个进程 一段时间

通常在一分钟内

我的背景:如果一分钟内创建了太多进程,那么就有问题了。我们的大部分遗留代码库都是从shell迁移到python的,但有时仍然有一些shell脚本速度较慢,因为它们需要很多进程

我想从这个数字创建一个图表。然后我想检查一下哪个主机以及为什么创建了这么多进程

我想用Python实现这一点

回答如何从/proc或/sys中读取这些内容将非常好

如果该解决方案适用于达到pid_max时发生的环绕,那就太好了

限制(pid的最大数量)为
/proc/sys/kernel/pid_max
。说:

/proc/sys/kernel/pid_max
(从Linux 2.5.34开始)

此文件指定PID环绕的值(即 此文件中的值大于最大PID)。默认值 此文件的值
32768
,会产生与上相同的PID范围 早期内核


我在windows下使用此功能,但也许您可以尝试将其作为起点

>>> import subprocess
>>> subprocess.Popen('tasklist')
<subprocess.Popen object at 0x00000268164C3CC0>
>>>
Name                           PID     Session name   No. of s  Utilisation
========================= ======== ================ =========== ============
导入子流程 >>>subprocess.Popen('tasklist') >>> 姓名PID会话姓名使用人数 ========================= ======== ================ =========== ============ 这将为您提供一个可以捕获的表


subprocess.Popen('tasklist').communicate()[0]
,只需计算行数,就可以得到当前进程数。在1分钟内再做一次,看看发生了什么变化,而不是手动查看/proc或/sys,让linux为您做:

import subprocess
from time import sleep

time = 0
ps = subprocess.Popen(["ps",'-A', '-o', 'pid'], stdout=subprocess.PIPE)
pids = [int(x) for x in ps.communicate()[0].split()[1:]]
new_pids_count = 0;

while time < 60:
    ps = subprocess.Popen(["ps",'-A', '-o', 'pid'], stdout=subprocess.PIPE)
    output = [int(x) for x in ps.communicate()[0].split()[1:]]
    for x in output:
        if x not in pids:
            new_pids_count += 1
            pids.append(x)
    time += 1
    sleep(1)
导入子流程
从时间上导入睡眠
时间=0
ps=subprocess.Popen([“ps”、'-A'、'-o'、'pid'],stdout=subprocess.PIPE)
在ps.communicate()[0].split()[1:]
新的pids计数=0;
当时间<60时:
ps=subprocess.Popen([“ps”、'-A'、'-o'、'pid'],stdout=subprocess.PIPE)
在ps.communicate()[0].split()[1:]
对于输出中的x:
如果x不在pids中:
新的pids计数+=1
pids.append(x)
时间+=1
睡眠(1)
最初,我使用ps-A-I-pid获取当前运行的所有pid,并将它们全部放在一个列表中

我每秒钟重复一次,通过比较再次运行的结果和不断增长的PID列表来检查新生成的进程。

检查
/proc/stat
,有一个
进程
字段,统计自引导以来的分叉数:


每隔几秒钟检查生成的进程是否是一个有效的解决方案?@OrDinari为什么不?这很有效,但可以进行大量的处理。如果我能在不检查所有流程的情况下获得号码,我将非常高兴。但你的解决方案是有效的,谢谢。这正是我想要找到的。不需要创建子进程来猜测这个值(希望进程ID是按顺序给出的)。非常感谢。
$ grep processes /proc/stat
processes 81579558