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