Сигнал (IPC)


Сигналы — это стандартизированные сообщения, отправляемые работающей программе для запуска определенного поведения, такого как завершение работы или обработка ошибок. Они представляют собой ограниченную форму межпроцессного взаимодействия (IPC), обычно используемую в Unix , Unix-подобных и других POSIX -совместимых операционных системах.

Сигнал — это асинхронное уведомление, отправляемое процессу или определенному потоку в том же процессе, чтобы уведомить его о событии. Обычно сигналы используются для прерывания, приостановки, завершения или уничтожения процесса. Сигналы возникли в 1970 -х годах в Bell Labs Unix и позже были определены в стандарте POSIX .

При отправке сигнала операционная система прерывает нормальный поток выполнения целевого процесса, чтобы доставить сигнал. Выполнение может быть прервано во время выполнения любой неатомарной инструкции . Если процесс ранее зарегистрировал обработчик сигнала , эта процедура выполняется. В противном случае выполняется обработчик сигнала по умолчанию.

Встроенные программы могут найти сигналы полезными для межпроцессного взаимодействия, поскольку сигналы отличаются своей алгоритмической эффективностью .

Сигналы похожи на прерывания , разница в том, что прерывания опосредованы ЦП и обрабатываются ядром , а сигналы опосредованы ядром (возможно, через системные вызовы) и обрабатываются отдельными процессами . Ядро может передать прерывание как сигнал процессу, вызвавшему его (типичными примерами являются SIGSEGV , SIGBUS , SIGILL и SIGFPE ).

Версия 1 Unix имела отдельные системные вызовы для перехвата прерываний, выходов и машинных ловушек. Версия 4 объединила все ловушки в один вызов, сигнал , а каждая пронумерованная ловушка получила в Версии 7 символическое имя . kill появился в Версии 2 , а в Версии 5 мог посылать произвольные сигналы. [1] Plan 9 от Bell Labs заменил сигналы примечаниями , которые позволяют отправлять короткие произвольные строки. [2]