您可以为此使用 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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)