
Я думаю, что сигналы Linux работают следующим образом:
У каждого процесса есть обработчик сигналов по умолчанию для каждого сигнала. Для некоторых сигналов обработчик сигналов по умолчанию завершает процесс, а для других сигналов обработчик сигналов по умолчанию просто игнорирует сигнал и т. д.
В следующей таблице показаны все действия, которые может выполнять обработчик сигналов по умолчанию (эта таблица взята из этогодокументация):
Срок Действие по умолчанию — завершение процесса.
Игн Действие по умолчанию — игнорировать сигнал.
Основной Действие по умолчанию — завершение процесса и сброс ядра (см. core(5)).
Останавливаться Действие по умолчанию — остановка процесса.
Продолжение Действие по умолчанию — продолжить процесс, если он в данный момент остановлен.
Вы можете переопределить обработчик сигналов по умолчанию своим собственным обработчиком сигналов, используясигнал()(что, я думаю, устарело) илисигэкшн().
Я прав?
Теперь мой вопрос: есть ли сигналы, для которых нельзя переопределить обработчик сигналов по умолчанию?
решение1
Обе страницы руководства, на которые вы ссылаетесь, упоминают сигналы, обработчики которых не могут быть переопределены.signal(2)
:
Сигналы
SIGKILL
невозможноSIGSTOP
уловить или проигнорировать.
В sigaction(2)
:
сигнумопределяет сигнал и может быть любым допустимым сигналом, кроме
SIGKILL
иSIGSTOP
.