Добавить обработчик события SIGINT. Но как я могу удалить этот обработчик?
Ответ 1
Вот что ты делаешь:
signal(SIGINT, SIG_DFL);
Это сбрасывает обработчик сигнала обратно на то, что было по умолчанию для этого сигнала (включая расположение по умолчанию, если оно не было установлено). В случае SIGINT он прерывает ваш процесс без основного дампа.
signal(signum, handler) задает расположение сигнала signum к handler, который является либо SIG_IGN, SIG_DFL, или адрес программиста определенных функций (а "обработчик сигнала").... Если для параметра установлено значение SIG_DFL, то происходит действие по умолчанию, связанное с сигналом.
Вы также можете найти эту информацию, используя команду man. Если вы вводите man signal в командной строке и читаете, вы должны это увидеть.
Это очень специфично для случая, когда вы заменили обработчик сигнала по умолчанию системы. В некоторых ситуациях вы должны просто восстановить, что обработчик был там в первую очередь. Если вы посмотрите на определение signal это выглядит так:
Таким образом, он возвращает sighandler_t. sighandler_t который он возвращает, представляет собой предыдущее "расположение" сигнала. Таким образом, еще один способ справиться с этим - просто сохранить возвращаемое значение и затем восстановить это значение, когда вы хотите удалить свой собственный обработчик.