gpt4 book ai didi

Python:杀死 child 的子进程

转载 作者:行者123 更新时间:2023-12-01 03:44:56 31 4
gpt4 key购买 nike

我有一个进程调用:

p=multiprocessing.Process(target=func_a)

然后func_a启动一个子进程:

subprocess.Popen(["nc", "-l", "-p", str(dport)], stdout=open(os.devnull, "w"))

我的问题是,当我调用p.terminate()时,它只会杀死第一个 child 。 p.terminate() 是一个 SIGKILL 那么当我在 中调用 p.terminate() 时如何使子进程终止multiprocessing.Process.

最佳答案

我找到了一种方法来确保在多处理进程被终止之前终止子进程:

创建一个这样的类:

import subprocess
import multiprocessing
import time
import os

class MyProcess(multiprocessing.Process):
def __init__(self):
super(MyProcess,self).__init__()
self.q = multiprocessing.Queue()

def run(self):
# do something else
child = subprocess.Popen(['Your CMD'])
self.q.put(child.pid)

def MyTerminate(self):
pid = self.q.get()
os.kill(pid, 9) # works in windows and linux
# os.popen('taskkill.exe /pid '+str(pid)+' /F') # works only in windows
self.terminate()

然后您可以使用函数MyTerminate()安全地终止进程。

例如:

def main():
mp = MyProcess()
mp.start()
time.sleep(1)
mp.MyTerminate()

子进程“child”将在1秒后被杀死。

关于Python:杀死 child 的子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39070857/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com