предполагает, что сброс обработчика сигнала приводит к повторному запуску сигнала
говорит, что как только обработчик сигнала вернется, сигнал будет сгенерирован повторно
Ни то, ни другое не верно. Однако я не верю, что это то, что подразумевают комментарии. Скорее всего, в некоторых случаях он оставляет сигнал необработанным. Таким образом, первоначальная проблема, вызвавшая сигнал, снова вызывает тот же сигнал. Рассмотрим этот пример:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
void handler(int sig)
{
write(1, "Received FPE\n", sizeof "Received FPE\n" - 1);
}
int main(void)
{
signal(SIGFPE, handler);
printf("%f", 1/0);
}
(Это должно вызвать бесконечный цикл).
SIGFPE на самом деле здесь не обрабатывается. Таким образом, как только управление возвращается из обработчика сигнала, SIGPFE повторно запускается. Я считаю, что это сценарий, который упоминается в этих комментариях.
Точно так же, когда сигналы заблокированы, они будут поставлены в очередь и отправлены в процесс после разблокировки. Они маскируют его при установке их обработчик сигнала. Это, вероятно, то, что относится ко второму комментарию. Маскирование также можно выполнить с помощью sigprocmask
или pthread_sigmask
.
person
P.P
schedule
14.11.2019