n1ro°
RU

Ошибки · Решение

Linux errno EINTR: что означает и как исправить

Системный вызов был прерван доставленным сигналом до нормального завершения.

Редакция N1RO · Проверено

Короткий ответ

В Linux errno EINTR означает «Interrupted system call». Сначала найдите системный вызов, который вернул код, затем проверяйте условия именно этой операции. Числовое значение errno не следует считать переносимым между архитектурами: ориентируйтесь на символическое имя.

Что означает ошибка

Системный вызов был прерван доставленным сигналом до нормального завершения.

Возможные причины

  • Процесс получил сигнал во время блокирующего вызова.
  • Обработчик сигнала выполнился без автоматического перезапуска вызова.
  • Библиотечная обёртка возвращает EINTR вызывающему коду.

Что проверить

  • Определите системный вызов и сигнал, после которого появляется EINTR.
  • Проверьте настройку sigaction и использование SA_RESTART.
  • Убедитесь, что код различает безопасно повторяемые и неповторяемые операции.

Безопасные шаги

  1. Повторяйте вызов после EINTR только когда его контракт это допускает.
  2. Для ожиданий пересчитывайте оставшийся timeout после прерывания.
  3. Не скрывайте EINTR бесконечным retry без учёта завершения приложения.

Только безопасные обратимые действия. Опасные шаги — только по официальной инструкции и с пониманием рисков.

Когда нужен сервис

  • Если errno EINTR воспроизводится после проверки системного вызова и окружения, приложите strace-фрагмент, путь/ресурс и kernel log владельцу соответствующего subsystem.

Похожие ошибки

  • /errors/linux-errno-esrch/
  • /errors/linux-errno-eio/
  • /errors/linux-errno-enxio/

Что учитывать

Точная причина зависит от версии ПО/прошивки, полного текста ошибки и контекста. Официальная инструкция имеет приоритет.

Официальный источник

Расшифровка сверена с официальными страницами поддержки из источников ниже. Редакция N1RO не диагностировала ваш конкретный случай.