最近我在写一个 pyqt 的程序,里面需要调用外部的一个 mpi 程序进行计算。我看网上都用 Qprocess 起外部程序,我试了一下,确实可以直接跑外部的 mpi 程序,但当我想中途 kill 这个 mpi 程序的时候,发现了一个问题,就是 Qprocess 自己虽然被杀死了,但由它起的 mpi 进程仍在后台跑。各位大佬知道如何完全 kill 由 Qprocess 起的 mpi 程序吗?
附上我的 pyqt 代码片段:
process = QProcess() process.setWorkingDirectory(f"{workDir}") command = f"mpiexec -n {mpiNum} {SG_INTEXE}" process.start(command) while True: if self.stopOneFlag: process.kill() process.waitForFinished(-1) process = None self.logChange.emit(f"{name}stop !\n") logging.info(f"{name}stop !") break
![]() | 1 SJ2050cn OP 上面是我直接截取我程序中的片段,涉及到一些具体的事务逻辑。这里我再提供一个最简化的复现片段: ```python process = QProcess() command = f"mpiexec -n 8 my_mpi_program" process.start(command) process.kill() process.waitForFinished(-1) process = None ``` |
![]() | 2 zzzain46 2023-02-26 12:12:41 +08:00 via iPhone 顶一下,最近也遇到过这个问题。问了 chatgpt 也不会… |
![]() | 3 thedrwu 2023-02-26 17:09:20 +08:00 via Android 找找 qprocess 文档里有没有 kill pgid |