Это простая реализация:
Положите куда-нибудь в свои int main()
несколько вызовов на signal()
, по одному на каждый сигнал, который вы хотите перехватить. Первый аргумент - это имя сигнала; вторая - это функция обработчика сигнала (подробнее об этом ниже):
signal(SIGFPE, SignalHandler);
signal(SIGILL, SignalHandler);
signal(SIGINT, SignalHandler);
signal(SIGSEGV, SignalHandler);
signal(SIGTERM, SignalHandler);
#ifndef WIN32
signal(SIGHUP, SignalHandler);
signal(SIGQUIT, SignalHandler);
signal(SIGKILL, SignalHandler);
signal(SIGPIPE, SignalHandler);
signal(SIGCHLD, SignalHandler);
#endif
Теперь напишите функцию сигнала. Он должен вернуть void и принять int: void SignalHandler(int signal_number)
:
void SignalHandler(int signal_number)
{
printf("Received signal: %s\n", strsignal(signal_number);
// Do something
}
Вот и все! Вы также можете проверить это, отправив сигнал себе с помощью функции raise(SIGNAL_NAME)
; например, попробуйте raise(SIGTERM);
!