繁体   English   中英

如何使用 Python 知道进程的生命周期?

[英]How to know a lifetime of a process with Python?

场景:我打开了多个 Firefox 浏览器。 在某个时候,我运行我的脚本来关闭所有已启动超过 30 分钟的 Firefox 进程。

我在 Windows 上这样做。 是否有可能从进程中获得生命周期?

PROCNAME = "firefox.exe"

# Shuts down all PROCNAME processes
for proc in psutil.process_iter():
    if proc.name() == PROCNAME:
        proc.kill()

我只是用psutil作为Amandan上述建议。 我使用了 PROCNAME“Google Chrome”,因为这是我正在运行的浏览器,我能够使用以下方法获得进程创建时间。

我假设您可以从进程创建时间中减去当前时间以获得浏览器运行的时间。

import psutil
import datetime

PROCNAME = "Google Chrome"

for proc in psutil.process_iter():
    if proc.name() == PROCNAME:
        p = psutil.Process(proc.ppid())
        print(f"Creation time of {PROCNAME} process: ", datetime.datetime.fromtimestamp(p.create_time()).strftime("%Y-%m-%d %H:%M:%S"))

输出: 在此处输入图片说明

psutil是一个非常棒的模块,可以为所有系统进程检索信息,它是跨平台的

psutil不提供有关进程已运行多长时间的信息,但是,它确实提供了进程创建时间,因此可以轻松计算进程运行时间。

import psutil
import time
PROCNAME = "firefox.exe"
for proc in psutil.process_iter():
      if proc.name() == PROCNAME:
        etime = time.time() - proc.create_time()
        print(etime)
        if(etime > 1800): #30mintues or more running time
          proc.kill()

Windows 的另一种方式:

import os, time, datetime, threading
import subprocess, psutil, statistics

def perf_psutil(n=100):
    liste = []    
    count = 0
    ct = time.time()
    while count < n:
        count+=1
        t0 = time.perf_counter_ns()
        p = [proc.create_time() for proc in psutil.process_iter() if proc.name() == "explorer.exe"][0]
        d = ct - p
        t1 = time.perf_counter_ns()
        liste.append(t1-t0)

    print("Date in sec:",p)
    print("Duration:",d)
    print("Performance psutil :", statistics.mean(liste)/10**9)

def perf_wmic(n=100):
    liste = []    
    count = 0
    ct = datetime.datetime.now()
    while count < n:
        count+=1
        t0 = time.perf_counter_ns()
        p = [x.split(b'CreationDate=')[1] for x in subprocess.Popen('wmic PROCESS WHERE NAME="Explorer.exe" GET * /format:list <nul', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT).communicate()[0].replace(b'\r\r\n',b',').split(b',') if x.startswith(b'CreationDate=')][0]
        d = datetime.datetime.now()-datetime.datetime(int(p[:4]),int(p[4:6]),int(p[6:8]),int(p[8:10]),int(p[10:12]),int(p[12:14]),int(p[15:-4]))
        t1 = time.perf_counter_ns()
        liste.append(t1-t0)

    print("Date :",p)
    print("Duration:",d.total_seconds())
    print("Performance wmic :", statistics.mean(liste)/10**9)
          
print('########## PSUTIL ##########')
perf_psutil(10)
print('############################')
print('########### WMIC ###########')
perf_wmic(10)
print('############################')

结果 :

########## PSUTIL ##########
Date in sec: 1624790271.081833
Duration: 18625.84829068184
Performance psutil : 0.17050247
############################

########### WMIC ###########
Date : b'20210627123751.081832+120'
Duration: 18628.22999
Performance wmic : 0.06602881
############################

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM