杀死另一个线程产生的进程

时间:2015-06-08 15:09:47

标签: python multithreading multiprocessing

我有一个Python进程,它从一个单独的线程产生另一个进程,例如

class MyClass(unittest.TestCase):

    def setup(self):
        def spawn_proc():
            subprocess.call("test_process")

        thread = threading.Thread(target=spawn_proc, args=(), daemon=True)
        thread.start()

    def cleanup(self):
        # @@@ kill test_process

所以调用MyClass.setup()意味着test_process将在第二个帖子中生成。

我想要的是从第一个线程中杀死test_process的方法。我已尝试在spawn_proc()中保存对该流程的引用,但由于在第二个帖子中执行了spawn_proc(),因此第一个流程无法访问。

最好的方法是什么?或者这种做法是不正确的?

做什么工作是另一个调用subprocess从操作系统查找PID,然后再调用kill,但我不确定是否有更好的方式。

1 个答案:

答案 0 :(得分:3)

问题是subprocess.call()没有返回任何线程句柄。它是一种同步方法(仅在被调用程序终止时返回)。

而是使用subprocess.Popen()

def setup(self):
    self.proc = subprocess.Popen("test_process")


def cleanup(self):
    self.proc.kill()

您不仅可以获得句柄,还可以完全避免使用threading模块。

有关Popen的更多详细信息(例如,如何与流程进行通信): https://docs.python.org/2/library/subprocess.html#popen-constructor