关闭我的应用程序时,所有线程和 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()
正如我所说,其他一切都会正确关闭。这是因为我将子进程嵌套到线程中吗?
最佳答案
如果父进程默认死亡,子进程不会自动死亡。请参阅Python: how to kill child process(es) when parent dies?
您可以在您的情况下显式调用 proc.terminate()
,例如在 atexit
处理程序中。
关于python - 子进程不会死,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29094638/