3

在 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?

4

1 回答 1

0

如果你在 Cygwin 中启动你的外部程序那么 Cygwin 会给它一个 PID。使用此 PID,您可以使用 Cygwin 的 kill 命令向进程发送信号。所以从 Cygwin 启动程序。在 MATLAB 中,您可以使用!ps(其中!表示调用外部 shell 命令)获取 Cygwin PID 的列表,然后!kill -s signal pid向程序发送信号。为了从 MATLAB GUI 中实现它,让来自某个按钮的回调 call !kill

于 2011-12-07T23:11:38.767 回答