Nik*_*iko 15 python linux pid process wait
我有这个:
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))
Run Code Online (Sandbox Code Playgroud)
然后我这样做:
process = get_process()
if process == None:
#do something
else:
#Wait until the process end
while is_running(process):
pass
Run Code Online (Sandbox Code Playgroud)
我认为这不是等待进程终止的最佳方式,必须有一些函数等待或者什么,但我找不到它.
免责声明:该流程不是子流程
Ilm*_*nen 15
我不是一个真正的Python程序员,但显然Python确实有os.waitpid()
.这应该消耗更少的CPU时间,并提供比尝试以四分之一秒的间隔杀死进程更快的响应.
附录:正如Niko指出的那样,os.waitpid()
如果该过程不是当前流程的子项,则可能无效.在这种情况下,使用os.kill(pid, 0)
可能确实是最好的解决方案.请注意,通常,调用os.kill()
流程有三种可能的结果:
OSError
与errno
设置属性errno.EPERM
.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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13997 次 |
最近记录: |