如何杀死由 Qt QProcess 运行的 MATLAB 批处理?

Posted

技术标签:

【中文标题】如何杀死由 Qt QProcess 运行的 MATLAB 批处理?【英文标题】:How to kill a MATLAB Batch Process ran by Qt QProcess? 【发布时间】:2021-01-09 23:17:14 【问题描述】:

我目前有一个 Python 程序,它像这样批量调用 MATLAB 脚本:

matlab = QProcess()
matlab.start('matlab -noFigureWindows -batch "cd(users/script_directory/); MyScript.m;"')
#^ command to start MATLAB batch process in CMD

我遇到的问题是,一旦这个批处理过程开始,就没有办法杀死它。因此,如果我的 Python 应用程序被强制关闭,MATLAB 脚本会继续运行并导致各种问题,这意味着我需要在应用程序关闭时终止该进程。

我将 MATLAB 脚本作为 QProcess 调用,当我在 MATLAB 脚本完成执行之前强制关闭 Python 应用程序时收到以下消息:

QProcess: Destroyed while process ("matlab") is still running.

有了这个,我如何停止批处理 MATLAB 进程?在 CMD 中使用 'ctrl-c' 有时可以杀死进程,但我需要它保持一致才能使 Python 正常工作。

同样,我可以让它“强制退出”或“重新启动”批处理 MATLAB 或类似的任何东西来清除所有正在运行的进程吗?

【问题讨论】:

如果从命令行启动,通常如何终止显示的 matlab 批处理命令? 【参考方案1】:

杀死它的蛮力方法是在应用程序开始时通过 process and system utilities library 杀死任何 matlab 进程:

import psutil

for process in psutil.process_iter():
    if process.name().lower() == 'matlab.exe':
        process.terminate()

【讨论】:

以上是关于如何杀死由 Qt QProcess 运行的 MATLAB 批处理?的主要内容,如果未能解决你的问题,请参考以下文章

避免 QProcess 被杀死 (QProcess: Destroyed while process is still running)

QT使用QProcess类,判断某个进程是否存在

QT使用QProcess类,判断某个进程是否存在

QProcess::startDetached shell 在父进程死亡时被杀死,如果父进程是一个 systemd 服务

运行 jar 文件使用 Qt (QProcess)

linux下QT中如何使用QProcess运行linux命令。