Как правильно использовать SIGINT для уничтожения приложений в C ++?

Я разрабатываю серверное приложение и хочу использовать SIGINT для уничтожения приложения. Хотя я знаю 2 способа, я не уверен, что это хороший способ убить это приложение.

Есть ли лучшие способы справиться с SIGING?

int main() {
startServer();

1. while(true) {sleep(3); if(sigFlag) break;}
2. std::getline(std::cin, param);

stopServer();
return 0;
}

0

Решение

#include<stdio.h>
#include<signal.h>
#include<unistd.h>

bool run = true;

void sig_handler(int signo)
{
if (signo == SIGINT)
{
printf("received SIGINT\n");
run = false;
}
}

int main(void)
{
if (signal(SIGINT, sig_handler) == SIG_ERR)
printf("\ncan't catch SIGINT\n");
// A long long wait so that we can easily issue a signal to this process
while(run)
sleep(1);
return 0;
}

Источник: http://www.thegeekstuff.com/2012/03/catch-signals-sample-c-code/

Вместо printf используйте return или exit

1

Другие решения

Первый способ лучше. Серверное приложение должно работать в фоновом режиме и не может обрабатывать ввод и вывод из завершения.

Еще один ключевой момент — второй способ заблокирует сервер. Способ передачи сигнала позволит избежать этой проблемы.

0

По вопросам рекламы [email protected]