python - 子进程不会死

标签 python multithreading subprocess

关闭我的应用程序时,所有线程和 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/

相关文章:

java - 如何理解JDK9的内存模型?

java - 池化问题 : Item borrowed more than once

Python 子进程 popen 管道

python - 如何在不使用 IDE 且不了解程序流程的情况下调试应用程序?

python - 将 pandas DataFrame 存储在 PyTables 表中而不存储索引

python - Python中的OpenCV putText-数组操作后发生错误

python - 使用 Fipy 的非线性 HJB PDE,PDE 翻译

c++ - 如何在c++中创建不同数量的线程?

python - OSError : [Errno 13] Permission denied Python subprocess. 调用()

python - 如何使用 python 打开 gnome-terminal 然后以多行方式运行 python 命令?