Я работаю над проектом сетевого программирования с использованием CLion. Поскольку я использую сокеты, если я не закрываю должным образом сокеты и другие сетевые объекты, которые я использую, тогда программа заблокирует порт, и мне придется самому закрывать его, используя командные строки.
Это довольно раздражает, учитывая, что мне придется делать это между каждым тестом. Поэтому я искал способ, которым CLion убивает программу, когда вы нажимаете «стоп», и обнаружил, что она посылает сигнал SIGINT, здесь :
Нажмите эту кнопку, чтобы завершить текущий процесс извне с помощью
стандартный скрипт выключения.
Нажатие на кнопку один раз вызывает мягкое уничтожение, позволяющее приложению
перехватить событие SIGINT и выполнить корректное завершение (в Windows
событие Ctrl + C эмулируется). После того, как кнопка нажата один раз, это
заменено значком запуска инструмента «Уничтожить окно», указывающим
щелчок приведет к принудительному закрытию приложения, например, в Unix
SIGKILL отправлено.
Тогда я пытался его поймать, но по некоторым причинам он не работает.
Поэтому я попытался создать новый проект, в котором я просто пытаюсь поймать сигнал SIGINT
. Вот очень простой нерабочий пример:
#include <iostream>
void signalHandling(int signal)
{
std::cout << "Signal : " << signal << std::endl;
}
int main() {
signal(SIGINT, signalHandling);
while (1)
{
;
}
}
Все, что я получаю, это: Process finished with exit code 1
.
Итак, мой вопрос: почему я не могу поймать этот сигнал, отправленный или, по крайней мере, предполагаемый для отправки CLion?
В случае, если это может быть связано с моей средой, я использую CLion 2018.1.5, мой набор инструментов - Cygwin, и я использую cmake 3.10.3. Я работаю на Windows 10.