Моя функция, созданная для обработки сигнала SIGINT, застревает в постоянном цикле. Идея состоит в том, чтобы заставить CTRL-C игнорировать родительский процесс, но отправляться дочернему процессу (и они обрабатывают его по умолчанию). Что происходит, когда я нажимаю CTRL-C, функция обработчика сигнала вызывается, но застревает в бесконечном цикле. Предполагается, что вызов kill отправит SIGTERM ко всему процессу в группе процессов, за исключением процесса отправителя. Любая помощь будет оценена по достоинству.Функция обработчика сигнала продолжает циклизацию
функция код:
void intHandler(int signum) {
kill(0, SIGTERM);
}
код вызова функции (в основной) является:
(void) sigset(SIGINT, intHandler);
«за исключением процесса отправителя» - спецификация не говорит об этом. Вам нужно заблокировать SIGTERM или удалить процесс из группы процессов. –
или отслеживать его в глобальном режиме и явно «убивать» ребенка вместо всех процессов. IIRC, вы также можете использовать 'sigaction', чтобы гарантировать, что' SIGTERM' игнорируется родителем и разблокируется в дочернем элементе. –
Я закончил делать то, что вы сказали, и он работает точно так, как мне нужно. Спасибо – zetatr