在MATLAB GUI应用程序中,我正在启动一个外部程序(Windows上的控制台应用程序),负责从测量系统中读取数据。数据存储在几个文件中,一旦外部程序完成,MATLAB应用程序就会处理这些文件。问题是:
当在命令行上运行时,可以通过发出SIGINT(即按 Ctrl + C )正常停止外部程序。信号处理程序捕获SIGINT并关闭程序。有没有办法在MATLAB GUI应用程序中执行此操作,方法是按“中止”按钮?
经过几个小时的搜索,我偶然发现了http://www.caam.rice.edu/~wy1/links/mex_ctrl_c_trick/,它展示了如何在MEX文件中检测SIGINT。让MEX调用外部程序可能会起作用(虽然我还不确定细节)。但是,它仍然需要 Ctrl + C 来停止程序。如何通过GUI中的按钮发送SIGINT?
答案 0 :(得分:0)
如果你在Cygwin开始你的外部程序,那么Cygwin会给它一个PID。使用此PID,您可以使用Cygwin的kill命令向进程发送信号。所以从Cygwin开始程序。在MATLAB中,您可以使用!ps
(其中!表示调用外部shell命令)获取Cygwin PID的列表,然后!kill -s signal pid
向程序发送信号。要从MATLAB GUI中实现它,请从一些按钮调用!kill
进行回调。