在 python 中,我打开了 4 个子进程。现在我想在 python 脚本中出现新请求时杀死所有以前的进程。
我正在使用 python 2.7 和 windows 7 操作系统。
谢谢,
在 python 中,我打开了 4 个子进程。现在我想在 python 脚本中出现新请求时杀死所有以前的进程。
我正在使用 python 2.7 和 windows 7 操作系统。
谢谢,
假设您想杀死所有子进程而不跟踪它们,外部 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()
在生成子进程的主 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 一个不错的技巧
你可以使用os.kill
函数
import os
os.kill(process.pid)
如果您使用该subprocess.Popen
函数打开子进程,则已返回进程 ID。但是如果你使用这个shell=True
标志要小心,因为在这种情况下进程 pid 将是 shell 进程 id。如果这是您的情况,这里有一个可能的解决方案。