Как я могу прервать MATLAB, когда он действительно очень занят? - PullRequest
34 голосов
/ 08 марта 2010

Я запускаю длинную симуляцию в MATLAB , которую, как я понял, мне нужно остановить и запустить снова. Тем не менее, MATLAB действительно в этом расчете, и он перестал отвечать. Как я могу прервать этот прогон, не убивая MATLAB?

(я понимаю, что это проблема многих программ для Windows, но она действительно остро стоит в MATLAB.)

Ответы [ 6 ]

22 голосов
/ 08 марта 2010

Перейдите в командное окно и много раз нажмите Ctrl-C. По моему опыту, на одноядерной машине у вас нет шансов, если вы не делаете много выходных данных. На многоядерном или многопроцессорном компьютере вы, возможно, в конце концов остановите его, но на это нужно время.

См. Также http://www.mathworks.com/support/solutions/en/data/1-188VX/index.html

Добавлено : рекомендуется (1) сохранить моментальный снимок вашего рабочего пространства перед запуском чего-либо очень длинного и (2) записать некоторые переменные в файл время от времени, чтобы вы могли возобновить расчет, если он был прерван (например, из-за сбоя питания).

18 голосов
/ 09 марта 2010

Насколько хорошо MATLAB реагирует на CTRL-C, скорее зависит от того, что он делает. Например, если он находится в середине вызова BLAS или LAPACK, он не будет отвечать до тех пор, пока этот вызов не вернется. Если вы находитесь в блоке кода, где выполняется множество строк MATLAB, вы можете ожидать, что CTRL-C будет более отзывчивым.

6 голосов
/ 05 февраля 2014

У меня есть очень простой трюк, чтобы приостановить (или остановить) неотвечающее выполнение. Если в моем симуляции выполняется длинный цикл, я всегда делаю следующее:

for ii = 1:N
   do_stuff();
   clear empty_script;
   empty_script;
end

А затем создайте файл empty_script.m, содержащий следующее:

%keyboard

Всякий раз, когда я хочу приостановить выполнение, я открываю внешний текстовый редактор и раскомментирую строку со словами keyboard в empty_script.m. Это оставляет меня в режиме отладки, где я могу смотреть переменные, изменять вещи или даже останавливать программу.

5 голосов
/ 03 мая 2012

Другая стратегия для решения этой проблемы - ввести очень короткую паузу где-нибудь в расчете (особенно в цикле FOR или WHILE), например:

for ii = 1:N
do_stuff();
pause(0.1);
end

Это увеличивает вероятность того, что ваш маниакальный Ctrl-C'ing действительно остановит его.

1 голос
/ 22 марта 2012

вы можете найти процесс MATLAB в диспетчере задач Windows и установить высокий или низкий приоритет и позволить другой программе иметь более низкий или высокий приоритет По моему опыту, это эффективный способ.

0 голосов
/ 09 октября 2012

если вы не хотите останавливаться и перезапускаться, тогда убийство - не плохой выбор Зайдите в диспетчер задач Windows-> Процессы, затем оштрафуйте MATLAB.exe и нажмите кнопку Завершить процесс

...