【发布时间】:2011-01-25 03:39:26
【问题描述】:
我正在MATLAB 中运行一个长时间的模拟,我意识到我需要停止并重新运行。但是,MATLAB 确实参与了这个计算,并且它停止了响应。如何在不杀死 MATLAB 的情况下中断此运行?
(我意识到这是许多 Windows 程序的问题,但在 MATLAB 中确实很严重。)
【问题讨论】:
标签: matlab windows-xp
我正在MATLAB 中运行一个长时间的模拟,我意识到我需要停止并重新运行。但是,MATLAB 确实参与了这个计算,并且它停止了响应。如何在不杀死 MATLAB 的情况下中断此运行?
(我意识到这是许多 Windows 程序的问题,但在 MATLAB 中确实很严重。)
【问题讨论】:
标签: matlab windows-xp
转到命令窗口,并多次按 Ctrl-C。根据我的经验,在单核机器上你没有机会,除非你做很多输出。在多核或多处理器机器上,您可能最终会停止它,但这需要时间。
另见http://www.mathworks.com/support/solutions/en/data/1-188VX/index.html
已添加:最好的做法是 (1) 在运行任何非常长的操作之前保存工作区的快照,以及 (2) 在非常长的计算中,将一些变量写入文件不时地,以便您可以在计算被中断(例如电源故障)时恢复计算。
【讨论】:
MATLAB 对 CTRL-C 的响应程度取决于它在做什么。例如,如果它处于 BLAS 或 LAPACK 调用的中间,则在该调用返回之前它不会响应。如果您在执行大量 MATLAB 行的代码块中,您可以期望 CTRL-C 响应更快。
【讨论】:
我有一个非常简单的技巧来暂停(或停止)无响应的执行。 如果我的模拟运行很长的循环,我总是执行以下操作:
for ii = 1:N
do_stuff();
clear empty_script;
empty_script;
end
然后创建一个文件empty_script.m,其中包含以下内容:
%keyboard
每当我想暂停执行时,我都会打开一个外部文本编辑器并取消注释 empty_script.m 中的 keyboard 行。这让我处于调试模式,我可以在其中查看变量、修改内容甚至停止程序。
【讨论】:
解决这个问题的另一种策略是在计算中的某处引入一个非常短的暂停(尤其是在 FOR 或 WHILE 循环中),如下所示:
for ii = 1:N
do_stuff();
pause(0.1);
end
这增加了你的疯狂 Ctrl-C'ing 实际上阻止它的机会。
【讨论】:
你可以在windows任务管理器中找到MATLAB进程,将优先级设置为高或低,让其他程序具有更低或更高的优先级。根据我的经验,这是一种有效的方法。
【讨论】:
如果你不停止并重新运行,那么杀戮是不错的选择 转到 windows 任务管理器-> 进程然后罚款 MATLAB.exe 并按下结束进程按钮
【讨论】: