有没有办法确保所有创建的子进程在Python程序退出时都消失了?所谓子流程,是指那些用subprocess.Popen()创建的内容。
如果不是,我是否应该遍历所有发出的终止点,然后终止-9?有什么清洁剂吗?
您可以为此使用 atexit
,并注册程序退出时要运行的所有清理任务。
atexit.register(func [,* args [, kargs]])**
在清理过程中,您还可以实现自己的等待,并在发生所需的超时时将其终止。
>>> import atexit
>>> import sys
>>> import time
>>>
>>>
>>>
>>> def cleanup():
... timeout_sec = 5
... for p in all_processes: # list of your processes
... p_sec = 0
... for second in range(timeout_sec):
... if p.poll() == None:
... time.sleep(1)
... p_sec += 1
... if p_sec >= timeout_sec:
... p.kill() # supported from python 2.6
... print 'cleaned up!'
...
>>>
>>> atexit.register(cleanup)
>>>
>>> sys.exit()
cleaned up!
注意 -如果该进程(父进程)被杀死,则不会运行注册的函数。
python > = 2.6不再需要以下Windows方法
这是一种杀死Windows中进程的方法。您的Popen对象具有pid属性,因此您可以通过 success = win_kill(p.pid)
调用它(需要安装pywin32):
def win_kill(pid):
'''kill a process by specified PID in windows'''
import win32api
import win32con
hProc = None
try:
hProc = win32api.OpenProcess(win32con.PROCESS_TERMINATE, 0, pid)
win32api.TerminateProcess(hProc, 0)
except Exception:
return False
finally:
if hProc != None:
hProc.Close()
return True
问题内容: 我目前正在使用 我对Python相当陌生,但是它“感觉”到应该有一些api可以让我做类似的事情: 我这样做是为了在知道cmd已经退出的情况下可以执行某些操作(例如,对当前正在运行的外部进程数进行计数) 我以为我可以将子流程包装在将线程与方法结合在一起的类中,但是由于我还没有在Python中完成线程,而且对于API来说这似乎很常见,我想我会尝试先找到一个。 提前致谢 :) 问题答案: 您
问题内容: 我正在使用ProcessBuilder启动子进程,并且如果父进程确实需要退出子进程。在正常情况下,我的代码可以正确阻止孩子。但是,如果我导致操作系统杀死父进程,则子进程将继续运行。 有什么方法可以将子进程“绑定”到父进程,以便在父进程被杀死时退出? 问题答案: 子进程与其父进程之间没有联系。他们可能彼此知道进程ID,但是它们之间没有硬连接。您在谈论孤立过程。这是操作系统级别的问题。意味
问题内容: 我想使用模块来完成此操作。 当我这样做时,例如: 我启动一个父进程,然后让父进程产生一个子进程, 然后我希望父进程退出自身,但子进程继续工作。 请允许我写一个 错误 代码来解释一下自己: 那么,我如何启动一个在父进程完成时不会被杀死的进程? 20140714 大家好 我的朋友刚刚告诉我一个解决方案… 我只是想… 无论如何,只要让您看到: 这确实有效!! 问题答案: 一个技巧:调用以退出
本文向大家介绍python子线程退出及线程退出控制的代码,包括了python子线程退出及线程退出控制的代码的使用技巧和注意事项,需要的朋友参考一下 下面通过代码给大家介绍python子线程退出问题,具体内容如下所示: 跑起来是没有问题的,但是使用ctrl + c中断的时候出问题了,主线程退出了,但子线程仍然运行。 于是在主线程增加了信号处理的代码,收到sigint时改变子线程循环条件 这样ctrl
问题内容: 假设我有一个进程,它恰好产生了一个子进程。现在,当父进程出于某种原因(正常或异常,通过kill,^ C,断言失败或其他任何原因)退出时,我希望子进程死亡。如何正确地做到这一点? 问题答案: 子进程可以通过在syscall中指定选项来要求父进程去世时内核发出(或其他信号),如下所示: 有关详细信息,请参见。 编辑:这是仅Linux
问题内容: 我想在子流程上使用超时 不幸的是,尽管这会引起超时错误,但它会在30秒后发生。看来check_output无法中断shell命令。 我该如何在Python方面阻止这种情况?我怀疑subprocess32无法杀死超时的进程。 问题答案: 超时基本上是: 有两个问题: [第二个]可能会等待后代进程,而不仅是直接子进程,请参见Python子进程.check_call与.check_outpu