Ошибки · Решение
Linux errno EINTR: что означает и как исправить
Системный вызов был прерван доставленным сигналом до нормального завершения.
Короткий ответ
В Linux errno EINTR означает «Interrupted system call». Сначала найдите системный вызов, который вернул код, затем проверяйте условия именно этой операции. Числовое значение errno не следует считать переносимым между архитектурами: ориентируйтесь на символическое имя.
Что означает ошибка
Системный вызов был прерван доставленным сигналом до нормального завершения.
Возможные причины
- Процесс получил сигнал во время блокирующего вызова.
- Обработчик сигнала выполнился без автоматического перезапуска вызова.
- Библиотечная обёртка возвращает EINTR вызывающему коду.
Что проверить
- Определите системный вызов и сигнал, после которого появляется EINTR.
- Проверьте настройку sigaction и использование SA_RESTART.
- Убедитесь, что код различает безопасно повторяемые и неповторяемые операции.
Безопасные шаги
- Повторяйте вызов после EINTR только когда его контракт это допускает.
- Для ожиданий пересчитывайте оставшийся timeout после прерывания.
- Не скрывайте EINTR бесконечным retry без учёта завершения приложения.
Только безопасные обратимые действия. Опасные шаги — только по официальной инструкции и с пониманием рисков.
Когда нужен сервис
- Если errno EINTR воспроизводится после проверки системного вызова и окружения, приложите strace-фрагмент, путь/ресурс и kernel log владельцу соответствующего subsystem.
Похожие ошибки
- /errors/linux-errno-esrch/
- /errors/linux-errno-eio/
- /errors/linux-errno-enxio/
Что учитывать
Точная причина зависит от версии ПО/прошивки, полного текста ошибки и контекста. Официальная инструкция имеет приоритет.
Официальный источник
Расшифровка сверена с официальными страницами поддержки из источников ниже. Редакция N1RO не диагностировала ваш конкретный случай.