Проблема с обработкой сигналов, обработкой прерываний - PullRequest
7 голосов
/ 03 сентября 2010

Пока процесс выполняет блокирующий системный вызов, скажем, чтение или запись, поступил сигнал.Системный вызов завершается с ошибкой EINTR?Перезапускается ли системный вызов после обработки системного вызова?

Предположим, системный вызов завершается с ошибкой EINTR, ядро ​​обрабатывает сигнал перед возвратом в пространство пользователя.

Обрабатывает ли обработчик сигналавыполняется в пользовательском режиме / режиме ядра?Если он находится в пользовательском режиме, произойдет ли возврат к инструкции после системного вызова (чтение / запись), во время которого поступил сигнал, или он снова перейдет в режим ядра после обработки сигнала и вернется к пользователю из ret_from_syscall.Как возобновить выполнение по команде рядом с системным вызовом, во время которого поступил сигнал?

Можно ли перезапустить систему, передавая флаг SA_RESTART в sigaction?

1 Ответ

3 голосов
/ 03 сентября 2010

Сигнал выполняется в пользовательском режиме , но с другим пользователем context , затем возвращается к ядру, которое возвращается к user_mode с ret_from_syscall. Поведение системного вызова при установке обработчика сигнала с SA_RESTART зависит от системного вызова.

Описание того, какой системный вызов перезапускается, доступно в последней версии справочной страницы обзора сигналов :

man 7 signal

Если флаг SA_RESTART не используется, системный вызов не перезапускается.

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