Как обрабатываются асинхронные сигналы в Linux? - PullRequest
7 голосов
/ 06 мая 2011

Это кажется глупым вопросом, но я нигде не могу найти ответ на него. Я знаю, что в UNIX сигналы обрабатываются асинхронно. Если я напишу функцию, которая обрабатывает сигнал, где эта функция запускается? Новый поток порожден? Существующий поток как-то прерывается? Или это обрабатывается в системном потоке, как асинхронный ввод-вывод?

Ответы [ 3 ]

6 голосов
/ 06 мая 2011

Сигнальная функция выполняется так, как если бы процесс был прерван. То есть обработчик сигнала вызывается с использованием сигнального потока, а стек переупорядочивается таким образом, чтобы при возврате обработчика сигнала поток продолжал выполнение. Новых тем не введено.

2 голосов
/ 06 мая 2011

Это не отдельный поток, но ваш код поспешно приостановлен.Вот почему доступно только ограниченное подмножество вызовов POSIX.

На справочной странице сигнала :

Обработчик процедуры должен быть очень осторожным, так как обработкав другом месте был прерван в какой-то произвольный момент.POSIX имеет понятие «безопасная функция».Если сигнал прерывает небезопасную функцию, а обработчик вызывает небезопасную функцию, то поведение не определено.Безопасные функции перечислены в различных стандартах.

2 голосов
/ 06 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...