我在Matlab中编写了一个长时间运行的脚本,例如,如何在Matlab中停止运行脚本
tic;
d = rand(5000);
[a,b,c] = svd(d);
toc;
它似乎永远运行。因为我在编辑器窗口中按F5。所以我不能按C-Break在Matlab控制台中停止。
我只想知道如何停止脚本。我目前使用任务管理器来杀死Matlab,这真的很愚蠢。
感谢。
我在Matlab中编写了一个长时间运行的脚本,例如,如何在Matlab中停止运行脚本
tic;
d = rand(5000);
[a,b,c] = svd(d);
toc;
它似乎永远运行。因为我在编辑器窗口中按F5。所以我不能按C-Break在Matlab控制台中停止。
我只想知道如何停止脚本。我目前使用任务管理器来杀死Matlab,这真的很愚蠢。
感谢。
Matlab帮助说这个 - 对于长时间运行的M文件,或者长时间运行内置或MEX文件的调用,Ctrl + C并不总是有效地停止执行。通常,这发生在Microsoft Windows平台上,而不是UNIX [1]平台上。如果遇到这个问题,可以通过在M文件中包含一个drawnow,pause或getframe函数来帮助MATLAB中断执行,例如在一个大循环中。请注意,如果您使用-nodesktop选项启动MATLAB,则Ctrl + C可能不太灵敏。
所以我不认为有任何选择存在。许多matlab函数都是复杂的。要么我们必须等待,要么不使用它们!
在执行mex实现的函数(如svd)时,MATLAB不响应Ctrl-C。另外,当MATLAB分配大块内存时,它不会响应。一个好的做法是始终运行少量数据的函数,并在所有测试通过时运行实际的比例。当时间成为问题时,您需要分析每段代码的运行时间以及粗略的时间复杂度。
要添加上:
你可以插入密集型或可能的僵局,即一个循环内的时间检查。
:
section_toc_conditionalBreakOff;
:
凡本条内
if (toc > timeRequiredToBreakOff) % time conditional break off
return;
% other options may be:
% 1. display intermediate values with pause;
% 2. exit; % in some cases, extreme : kill/ quit matlab
end
考虑使用多个MATLAB会话。保留主会话窗口(包含所有颜色,文件管理器,命令历史记录,工作区,编辑器等),以便运行您知道会终止的东西。
东西,你与尝试,说你与颂歌套件搞乱,你会得到很多的警告:矩阵奇异,因为你改变了一些参数,并不能预测会发生什么,在一个单独的会话中运行:
dos('matlab -automation -r &')
你可以在不重新启动整个Matlab的情况下杀死它。
我采用的一种解决方案 - 与java代码一起使用,但概念与mexFunctions相同,只是messier - 是返回一个FutureValue,然后循环,而FutureValue.finished()或其他返回true。实际的代码在另一个线程/进程中执行。包装一个尝试,抓住这一点,在catch块中的FutureValue.cancel()适用于我。
在mex函数的情况下,您将需要返回指向具有您需要的所有数据的结构/对象(native native handler,bool for complete等)的指针的某个指针(作为int)。在内建mexFunction的情况下,您的mexFunction将很可能需要在单独的线程中调用该mexFunction。毕竟,Mex函数只是DLLs /共享对象。
伪
FV = mexLongProcessInAnotherThread();
try
while ~mexIsDone(FV);
java.lang.Thread.sleep(100); %pause has a memory leak
drawnow; %allow stdout/err from mex to display in command window
end
catch
mexCancel(FV);
end
,如果你正在运行的Linux上的MATLAB,你可以在linux consule通过命令终止MATLAB。
顶部
那么你可以使用此代码MATLAB杀: 首先应该通过这个代码中找到MATLAB的PID号 杀
例如: 杀58056
如果CTRL + c因为脚本太长/太复杂而无法立即回应,请按住它。
当matlab执行一些较深的脚本时,break命令不会运行,或者它不会在缓冲区中记录一个ctrl序列,或者在它完成之前或之后清除缓冲区码。无论哪种情况,当matlab返回执行更多的脚本时,它会识别出你正在按住ctrl + c并终止。
对于长时间运行的程序,我通常试图找到一个好地方,提供状态更新,我总是陪伴,随着时间一定程度上使用TIC和TOC。根据我在做什么,我可能会使用运行时间,段时间,某种平均,等等
对于很长的正在运行的程序,我发现这是非常有用的 http://www.mathworks.com/matlabcentral/fileexchange/16649-send-text-message-to-cell-phone/content/send_text_message.m
但看起来他们也有一些更新的功能。
既然你提到任务管理器,我猜你正在使用Windows。假设你在编辑器中运行脚本,如果你不反对在戒烟的同时编辑器退出正在运行的程序,键盘快捷键来结束进程是:
Alt键 + F4
(我指的是同时按下 'Alt键' 和键盘上的 'F4' 键)。
另外,在其他的答案中提到,
Ctrl键 + C
也应该可以工作,但不会退出编辑器。
这似乎是我需要的东西。然而,这个函数叫做mexCancel,那个看起来怎么样? – patrik 2014-06-03 12:38:08