Я разрабатываю серверное приложение и хочу использовать SIGINT для уничтожения приложения. Хотя я знаю 2 способа, я не уверен, что это хороший способ убить это приложение.
Есть ли лучшие способы справиться с SIGING?
int main() {
startServer();
1. while(true) {sleep(3); if(sigFlag) break;}
2. std::getline(std::cin, param);
stopServer();
return 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
Первый способ лучше. Серверное приложение должно работать в фоновом режиме и не может обрабатывать ввод и вывод из завершения.
Еще один ключевой момент — второй способ заблокирует сервер. Способ передачи сигнала позволит избежать этой проблемы.