使用子流程库,我产生了新的流程。
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?
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