1

在 python 中,我打开了 4 个子进程。现在我想在 python 脚本中出现新请求时杀死所有以前的进程。

我正在使用 python 2.7 和 windows 7 操作系统。

谢谢,

4

3 回答 3

3

假设您想杀死所有子进程而不跟踪它们,外部 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()
于 2013-05-09T09:56:25.520 回答
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 一个不错的技巧

于 2013-05-09T09:54:06.057 回答
-1

你可以使用os.kill函数

import os
os.kill(process.pid)

如果您使用该subprocess.Popen函数打开子进程,则已返回进程 ID。但是如果你使用这个shell=True标志要小心,因为在这种情况下进程 pid 将是 shell 进程 id。如果这是您的情况,这里有一个可能的解决方案。

于 2013-05-09T09:53:52.910 回答