繁体   English   中英

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

[英]Killing a process spawned by another thread

我有一个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从OS,然后再调用杀查找的PID,但我不知道是否有更好的方法。

问题是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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM