如何杀死python中的所有子进程

时间:2013-05-09 09:40:17

标签: python windows subprocess popen

在python中我打开了4个子进程。现在,我希望在python脚本中出现新请求时终止所有先前的进程。

我使用的是python 2.7和Windows 7操作系统。

谢谢,

3 个答案:

答案 0 :(得分:2)

假设您想要在不跟踪它们的情况下终止所有子进程,外部lib psutil可以轻松实现:

   import os
   import psutil
   # spawn some child processes we can kill later
   for i in xrange(4): psutil.Popen('sleep 60')

   # now kill them
   me = psutil.Process(os.getpid())
   for child in me.get_children():
       child.kill()

答案 1 :(得分:1)

在您生成子进程的主python脚本中,使用它发送/传递一个Event对象,并在主进程中使用事件保留子进程的引用

示例代码:

from multiprocessing import Process, Event

# sub process execution point
def process_function(event):
    # if event is set by main process then this process exits from the loop
    while not event.is_set():
        # do something

# main process

process_event = {}  #  to keep reference of subprocess and their events
event = Event()
p = Process(target=process_function, args=(event))
p.start()
process_event[p] = event

# when you want to kill all subprocess
for process in process_event:
    event = process_event[process]
    event.set()

修改
当你评论你的问题时,我认为它在你的场景中并不是很有用,因为你正在使用subprocess.Popen.But一个很好的技巧但是

答案 2 :(得分:0)

您可以使用os.kill功能

import os
os.kill(process.pid)

如果使用subprocess.Popen函数打开子进程,则返回进程ID。但是如果使用shell=True标志,请小心,因为在这种情况下,进程pid将是shell进程ID。如果是这种情况,here是一个可行的解决方案。