gpt4 book ai didi

python - 等到某个进程(知道 "pid")结束

转载 作者:IT王子 更新时间:2023-10-29 00:25:29 26 4
gpt4 key购买 nike

我有这个:

def get_process():
pids = []
process = None
for i in os.listdir('/proc'):
if i.isdigit():
pids.append(i)

for pid in pids:
proc = open(os.path.join('/proc', pid, 'cmdline'), 'r').readline()
if proc == "Something":
process = pid

return process

def is_running(pid):
return os.path.exists("/proc/%s" % str(pid))

然后我这样做:

process = get_process()
if process == None:
#do something
else:
#Wait until the process end
while is_running(process):
pass

我认为这不是等待进程终止的最佳方式,必须有一些功能等待或其他东西,但我找不到它。

免责声明:该进程不是子进程

最佳答案

我不是真正的 Python 程序员,但显然 Python 确实有 os.waitpid() .与尝试以四分之一秒为间隔终止进程相比,这应该会消耗更少的 CPU 时间并提供更快的响应。


附录: 正如 Niko 所指出的,如果进程不是当前进程的子进程,os.waitpid() 可能无法工作。在那种情况下,使用 os.kill(pid, 0) 可能确实是最好的解决方案。请注意,一般来说,在进程上调用 os.kill() 可能会出现三种结果:

  1. 如果进程存在并且属于你,则调用成功。
  2. 如果进程存在但属于另一个用户,它会抛出一个 OSError 并将 errno 属性设置为 errno.EPERM .
  3. 如果该进程不存在,它会抛出一个 OSError 并将 errno 属性设置为 errno.ESRCH .

因此,要可靠地检查进程是否存在,您应该做类似的事情

def is_running(pid):        
try:
os.kill(pid, 0)
except OSError as err:
if err.errno == errno.ESRCH:
return False
return True

关于python - 等到某个进程(知道 "pid")结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7653178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com