Я выполняю длинную симуляцию в MATLAB, что я понял, что мне нужно остановить и повторить. Однако MATLAB действительно участвует в этом расчете, и он перестает отвечать. Как я могу прервать этот прогон, не убив MATLAB?
(Я понимаю, что это проблема со многими программами Windows, но это очень важно для MATLAB.)
Перейдите в командное окно и нажмите 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
Всякий раз, когда я хочу приостановить выполнение, я открываю внешний текстовый редактор и раскомментирую строку keyboard
в empty_script.m
. Это оставляет меня в режиме отладки, где я могу наблюдать за переменными, изменять материал или даже останавливать программу.
Другая стратегия для решения этой проблемы - ввести очень короткую паузу где-нибудь в вычислении (особенно в цикле FOR или WHILE), как в:
for ii = 1:N
do_stuff();
pause(0.1);
end
Это увеличивает вероятность того, что ваш маниакальный Ctrl-C'ing фактически остановит его.
вы можете найти процесс MATLAB в диспетчере задач Windows и установить приоритет как высокий или низкий, и пусть другая программа имеет более низкий или более высокий приоритет. По моему опыту, это эффективный способ.
Если вы хотите остановить и повторить, то убийство неплохое решение Перейдите в диспетчер задач Windows → Процессы, затем оштрафовать MATLAB.exe и нажмите кнопку "Завершить процесс"