在Matlab中停止脚本

时间:2012-02-02 18:14:59

标签: matlab

我的问题是,如何通过按下GUI按钮来停止脚本?我已经尝试编写一个模拟“CTRL + C”按下的代码,但它不起作用。

4 个答案:

答案 0 :(得分:1)

我不确定是否有办法阻止调用另一个脚本。另一种方法是设置一个全局变量,该变量由您希望停止的脚本定期检查。如果在回调中将“停止处理”变量的值设置为true,则另一个脚本可能会在发现它应该停止时停止。

修改

如果您希望有一个GUI选项来停止正在进行的过程,我建议您在MATLAB文件交换中查看STOPLOOP之类的内容。

答案 1 :(得分:1)

我不会为你编写代码,但这是完成此任务的高级方法:

显示带有按钮的waitbar。为按钮创建一个回调函数,将标志设置为true。

在for循环中开始计算。在循环: 1.更新等候栏。 2.调用drawnow函数,以便正确执行回调。记住MATLAB是单线程的,所以这是必要的,否则在脚本完成之前不会执行回调。 3.执行任何其他计算 4.检查标志设置为true。如果是,则返回停止执行。

标志可以是全局变量,也可以是基于句柄的对象(以便通过引用传递)。

答案 2 :(得分:0)

编辑:
这个答案不适用于当前的问题 此答案仅适用于第一行= #!/usr/bin/matlab

的脚本

使用pkill无选项将发送一个TERM信号:

pkill yourscriptname

如果你真的想要与CTRL+C相同的信号,那么:

pkill -3 yourscriptname

如果您的脚本仍然没有停止,您可以使用最激进的信号KILL:

pkill -9 yourscriptname

当然,如果您知道PID(进程标识符),则只需使用kill

kill    yourPID
kill -3 yourPID 
kill -9 yourPID 

您可以使用以下命令之一获取有关信号的更多信息:

man 7 signal
kill -l
info signal

答案 3 :(得分:0)

我没有做很多GUI,但出于调试目的,我会尝试将按钮回调设置为@keyboard。就是这样:

set(handleToGuiButton,'Callback',@keyboard)

要实际停止执行,您需要以某种方式将此按钮按下进入正在执行的循环,例如通过全局变量或更高级的东西(例如https://stackoverflow.com/a/8537460/931379

但我会诚实地看看stoploop链接(来自另一个答案),然后才能走下这些路线。