matlab - 从 MATLAB GUI 中发送 SIGINT

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

最佳答案

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

https://stackoverflow.com/questions/6682063/

相关文章:

memory - 可寻址和可移动的最小存储单元

hibernate - 如何通过 JPA 注释指定具有一定长度的整数

python - 如何在 Mayavi2/VTK 中为绘图添加比例尺?

django - 需要一个用于 Django 的轻量级独立 Web 服务器

ruby-on-rails - 数组的未定义方法 `serializable_hash'

http - 最适合用于过期登录的 HTTP 状态(基于表单的登录)

php - 速率函数的问题

sql - 微软 Access : How can I count duplicate rows?

python - DNSSEC 使用 DNSPython 对 RRSET 进行签名

visual-studio-2010 - 以编程方式发布 Web 应用程序