LINUX.ORG.RU

обработчик SIGTERM в программе собраной под cygwin

 


0

1

Есть две программы: одна написанна с использованием Qt4, вторая на std с++.
Программа на Qt запускает вторую программу используя QProcess, когда надобность во второй программе отпадает, она ее останавливает методом из QProcess terminate(), во второй программе реализован обработчик сигнала SIGTERM.
Все это здорово работает под Linux. Но случилось страшное, заказчик захотел все это под windows.
Программу на std с++ собрал под cygwin-ом, на Qt собрал Qt SDK для windows. Все более менее работает, но с посылкой SIGTERM проблема.
Из Qt документации следует, что в windows метод terminate() вместо SIGTERM посылает WM_CLOSE message.
Собственно вопрос можно ли программе собраной под cygwin-ом перехватить и обработать сигнал завершения?


#ifdef Q_OS_CYGWIN
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
#endif

// ...

#ifdef Q_OS_CYGWIN
::kill(process->pid(), SIGTERM);
#else
process->terminate();
#endif
sjinks ★★★
()

А лучше, наверное, запускать

qmake -unix ...

для генерации проекта

sjinks ★★★
()

Давно это было, боюсь соврать, но помнится, что cygwin емулит обработчик SIGTERM подобно коллбеку зареганому ч-з atexit.

Так что смотри в сторону чего то вроде SetConsoleCtrlHandler.

PS: на винфаке такое спрашивать надо

AF ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.