[英]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.