Отправка SIGINT из графического интерфейса MATLAB

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

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

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


person Atze Kaputtnik    schedule 13.07.2011    source источник
comment
Вы видели stackoverflow.com/questions/813086/? Вы ведь сказали, что находитесь под Windows, верно?   -  person Jonas Heidelberg    schedule 14.07.2011
comment
возможный дубликат Matlab: реализация того, что делает CTRL+C, но в код   -  person Jonas    schedule 18.04.2012


Ответы (1)


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

person snowape    schedule 07.12.2011