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

时间:2019-05-09 12:27:02

标签: python process lifetime

方案:我打开了多个Firefox浏览器。某个时候,我运行脚本以关闭所有已启动30分钟以上的firefox进程。

我正在Windows上执行此操作。 是否有可能从一个过程中获得生命?

PROCNAME = "firefox.exe"

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

3 个答案:

答案 0 :(得分:0)

我只是将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"))

输出: enter image description here

答案 1 :(得分:0)

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()

答案 2 :(得分:0)

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
############################