Qt 里的 Qprocess 怎么完全 kill 一个 mpi 程序

2023-02-26 11:47:09 +08:00
 SJ2050cn

最近我在写一个 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
11144 次点击
所在节点    Qt
3 条回复
SJ2050cn
2023-02-26 12:05:37 +08:00
上面是我直接截取我程序中的片段,涉及到一些具体的事务逻辑。这里我再提供一个最简化的复现片段:
```python
process = QProcess()
command = f"mpiexec -n 8 my_mpi_program"
process.start(command)
process.kill()
process.waitForFinished(-1)
process = None
```
zzzain46
2023-02-26 12:12:41 +08:00
顶一下,最近也遇到过这个问题。问了 chatgpt 也不会…
thedrwu
2023-02-26 17:09:20 +08:00
找找 qprocess 文档里有没有 kill pgid

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/919238

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX