关闭我的应用程序时,所有线程和Tkinter线程成功关闭,但是我退出时拒绝关闭的子进程。
class ThreadedTask(Thread):
def __init__(self, queue):
Thread.__init__(self)
self.queue = queue
def run(self):
proc = Popen("receivetest -f=/dev/pcan33".split(), stdout = PIPE)
payload = iter(proc.stdout.readline, "")
for line in payload:
if line[0].isdigit():
splitline = line.split()
self.dictAdd(splitline)
这是包含子进程的类。
这就是开头的电话:
if __name__ == "__main__":
root = tk.Tk()
Data = Queue.Queue()
DataThread = ThreadedTask(Data)
DataThread.daemon = True
DataThread.start()
myapp = BaudWindow(root)
root.mainloop()
正如我所说,其他一切正确关闭。这是因为我已将子进程嵌套到线程中了吗?
答案 0 :(得分:1)
如果父进程默认死亡,子进程不会自动死亡。见Python: how to kill child process(es) when parent dies?
您可以在您的情况下明确地致电proc.terminate()
,例如atexit
处理程序。
答案 1 :(得分:0)
那是因为你没有启动子进程而是一个单独的线程。请尝试使用subprocess.popen()。它按照你想要的方式工作。