在python中我打开了4个子进程。现在,我希望在python脚本中出现新请求时终止所有先前的进程。
我使用的是python 2.7和Windows 7操作系统。
谢谢,
答案 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是一个可行的解决方案。