Python-验证通过PID过滤的进程是否仍在运行

问题描述 投票:0回答:1

使用子流程库,我产生了新的流程。

import subprocess
pid = subprocess.Popen(["sleep", "1"]).pid
is_process_running(pid)

整个要点是在异步等待中调用脚本并继续执行程序。我不想在调用相同脚本的情况下产生多个子进程,这就是为什么我试图检测系统中是否仍存在具有给定PID编号的进程。

我使用的功能以下列方式显示:

import os
def is_process_running(process_id):
    try:
        os.kill(process_id, 0)
        return True
    except OSError:
        return False

很遗憾,使用子流程库创建的流程将永远可以访问。这些文件的状态为:已终止。因此,我上面编写的函数始终返回True。有什么方法可以检测该进程是否被标记为defunct

python subprocess
1个回答
0
投票
Popen调用返回的subprocess.Popen实例的保存和操作要简单得多。这就是您想要的:

import subprocess as sp import time def is_process_running(proc): return proc.poll() is None proc = sp.Popen(['sleep', '10']) is_process_running(proc) # will return True time.sleep(6) is_process_running(proc) # still True time.sleep(6) is_process_running(proc) # will now return False

© www.soinside.com 2019 - 2024. All rights reserved.