Отправка SIGINT из GUI MATLAB - PullRequest
2 голосов
/ 13 июля 2011

В приложении MATLAB GUI я запускаю внешнюю программу (консольное приложение в Windows), которая занимается чтением данных из измерительной системы.Данные хранятся в нескольких файлах, которые обрабатываются приложением MATLAB после завершения работы внешней программы.Проблема заключается в следующем:

Внешнюю программу при запуске в командной строке можно аккуратно остановить, введя SIGINT (т. Е. Нажав Ctrl + C ).,Обработчик сигнала перехватывает сигнал SIGINT и закрывает программу.Есть ли способ сделать это из приложения MATLAB GUI, нажав кнопку «abort»?

После многих часов поиска я наткнулся на http://www.caam.rice.edu/~wy1/links/mex_ctrl_c_trick/, который показывает, как обнаружить SIGINT вMEX файл.Разрешение вызова MEX внешней программе может сработать (хотя я пока не уверен в деталях).Однако для остановки программы все равно требуется Ctrl + C .Как я могу отправить SIGINT с помощью кнопки в моем графическом интерфейсе?

1 Ответ

0 голосов
/ 08 декабря 2011

Если вы запустите свою внешнюю программу в Cygwin , то Cygwin выдаст ей PID.Используя этот PID, вы можете использовать команду kill Cygwin для отправки сигналов процессу.Итак, запустите программу от Cygwin.В MATLAB вы можете использовать !ps (где! Означает вызов команды внешней оболочки), чтобы получить список PID Cygwin, а затем !kill -s signal pid, чтобы отправить сигнал программе.Чтобы это произошло из MATLAB GUI, пусть обратный вызов от какой-то кнопки вызывает !kill.

...