Остановить скрипт в Matlab - PullRequest
0 голосов
/ 02 февраля 2012

У меня вопрос, как мне остановить скрипт нажатием кнопки GUI?Я уже пытался написать код, который имитирует нажатие клавиш "CTRL + C", но он не работает.

Ответы [ 4 ]

1 голос
/ 02 февраля 2012

Я не уверен, что есть способ остановить вызов другого скрипта.Одной из альтернатив будет установка глобальной переменной, которая периодически проверяется скриптом, который вы хотите остановить.Если вы установите значение переменной «stop processing» равным true в вашем обратном вызове, другой скрипт может остановиться, если обнаружит, что он должен был остановиться.

Редактировать

Если вы хотите иметь возможность графического интерфейса для остановки текущего процесса, я бы порекомендовал вам взглянуть на что-то вроде STOPLOOP в MATLAB File Exchange.

1 голос
/ 02 февраля 2012

Я не буду писать код для вас, но вот высокоуровневый способ сделать это:

Отображение waitbar с кнопкой на нем. Создайте функцию обратного вызова для кнопки, которая устанавливает флаг в значение true.

Начать вычисления внутри цикла for. В петле: 1. обновить панель ожидания. 2. вызвать функцию drawnow, чтобы обратный вызов выполнялся правильно. Помните, что MATLAB является однопоточным, так что это необходимо, иначе обратный вызов не будет выполнен, пока сценарий не завершится. 3. выполнить любые другие вычисления 4. проверьте, установлен ли флаг в значение true. если это правда, вернитесь, чтобы остановить выполнение.

Флаг может быть глобальной переменной или объектом на основе дескриптора (чтобы он передавался по ссылке).

0 голосов
/ 03 февраля 2012

Я не слишком много GUI, но для целей отладки я бы попытался установить обратный вызов кнопки на @keyboard. То есть что-то вроде:

set(handleToGuiButton,'Callback',@keyboard)

Чтобы фактически остановить выполнение, вам нужно как-то передать это нажатие кнопки в цикл, который выполнялся, например, через глобальные переменные, или что-то более необычное (например, https://stackoverflow.com/a/8537460/931379)

Но я бы честно посмотрел ссылку stoploop (из другого ответа), прежде чем идти по любому из этих маршрутов.

0 голосов
/ 02 февраля 2012

РЕДАКТИРОВАТЬ:
Этот ответ не применим к текущему вопросу.
Этот ответ применим только для сценариев с первой строкой = #!/usr/bin/matlab

использование pkill без опции отправит сигнал TERM:

pkill yourscriptname

Если вы действительно хотите тот же сигнал, что и CTRL+C, тогда:

pkill -3 yourscriptname

Если ваш сценарий по-прежнему не останавливается, вы можете использовать самый агрессивный сигнал KILL:

pkill -9 yourscriptname

Конечно, если вы знаете PID (Process IDentifier), вы можете просто использовать kill:

kill    yourPID
kill -3 yourPID 
kill -9 yourPID 

Вы можете получить больше информации о сигналах , используя одну из следующих команд:

man 7 signal
kill -l
info signal
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...