Сигнал (IPC)
-
Основы сигналов в Unix
- Сигнал — это асинхронное уведомление о событии, которое может прервать процесс.
- Сигналы были введены в 1970-х годах и стали частью стандарта POSIX.
- Сигналы могут использоваться для различных целей, включая межпроцессное взаимодействие.
-
История и эволюция сигналов
- В ранних версиях Unix были отдельные системные вызовы для прерываний и сигналов.
- В версии 4 сигналы были объединены в один вызов, а в версии 5 появилась возможность отправлять произвольные сигналы.
- В версии 7 каждому сигналу было присвоено символическое название.
- В конце 80-х годов Plan 9 заменил сигналы нотами, позволяющими отправлять короткие строки.
-
Отправка и обработка сигналов
- Системный вызов kill() отправляет сигнал процессу, если это разрешено.
- Команда kill() позволяет пользователю отправлять сигналы процессам.
- Библиотечная функция raise() отправляет сигнал текущему процессу.
- Сигналы могут быть обработаны с помощью системного вызова signal() или функции sigaction().
- Существуют сигналы, которые нельзя перехватить и обработать, например SIGKILL и SIGSTOP.
-
Риски и рекомендации
- Обработка сигналов может быть уязвима из-за условий гонки.
- Сигналы должны обрабатываться в главном потоке, а не в рабочих пулах.
- Сигналы должны быть обработаны безопасно, чтобы избежать нежелательных побочных эффектов.
- Управление очередью сигналов не является безопасным, поэтому сигналы должны обрабатываться из очереди.
-
Связь с аппаратными исключениями
- Аппаратные исключения могут быть обработаны с помощью сигналов, если ядро не может обработать их самостоятельно.
- Сигналы POSIX соответствуют определенным аппаратным исключениям, но точное соответствие зависит от процессора.
-
Таблица сигналов Unix
- В статье представлена таблица сигналов Unix, которая документирует сигналы, определенные в спецификации Unix.
- В таблице перечислены действия по умолчанию для сигналов, которые могут быть определены процессом.
-
Дополнительные ссылки
- В статье приведены внешние ссылки на ресурсы, которые углубляют понимание сигналов в Unix.