如何杀死由 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)
QProcess::startDetached shell 在父进程死亡时被杀死,如果父进程是一个 systemd 服务