У меня есть одна мысль. Я определяю свои собственные обработчики для таких сигналов.
sig_11.sa_handler = &signal1_SIGILL;
sig_11.sa_flags=SA_NODEFER;
if (sigaction(SIGUSR2, &sig_12, NULL ) < 0) {
perror ("sigaction");
return 1;
}
Я создаю такие обработчики для разных сигналов. Но это не имеет большого значения.
Все выглядит и работает хорошо, пока я не посылаю сигнал USR2. Похоже, что это заставляет процесс игнорировать все остальные сигналы. Он не прерывает процесс, а просто игнорирует все остальные сигналы.
Это нормальное поведение?
Вы не инициализировали sa_mask
и вы не сообщили нам, как sig_11
переменная sig_11
и что сделано в обработчике, но я подозреваю, что в sa_mask
установлено неправильное значение, поэтому, по крайней мере, во время работы обработчика некоторые сигналы могут быть заблокирован. Обычно в конце обработчика все возвращается к норме.
По крайней мере, SIGKILL
можно использовать, поскольку его нельзя заблокировать или поймать.