Что означает код errno 3 (ESRCH)?

 
Также может означать:
КонстантаТипОС
ERROR_PATH_NOT_FOUNDОшибка WindowsWindows
STATUS_WAIT_3NTSTATUSWindows
KERN_NO_SPACEКод возврата ядра macOSmacOS
ippStsSqrtNegArgСтатус Intel IPPЛюбая
INVALID_AFFINITY_SETКод BSODWindows
Предыдущий Следующий
ENOENT EINTR

ESRCH

Идентичность процесса зависит от времени

ESRCH чаще всего встречается в kill(): переданный PID или идентификатор группы не обозначал цель в момент обработки запроса ядром. То же состояние возможно после того, как дочерний процесс уже собран, либо когда Linux pidfd_open() должен получить дескриптор процесса, который успел завершиться.

Это отличается от EPERM. EPERM означает, что цель найдена, но вызывающему запрещено отправить сигнал; ESRCH означает отсутствие цели. Предварительный kill(pid, 0) позволяет проверить PID без отправки сигнала, но не устраняет гонку: процесс может завершиться после проверки.

Что записать и как обработать

  • Сохраните точную операцию, PID или идентификатор группы, запрошенный сигнал и контекст PID namespace либо диспетчера служб.
  • Для управляемого дочернего процесса проверьте обработку waitpid() и SIGCHLD: другая ветвь могла уже забрать его статус.
  • Явно решите, означает ли отсутствующая цель ожидаемое «уже остановлен» или ошибку управляющей системы. Повтор с тем же сырым PID не создаст исходный процесс заново.
  • В Linux для длительного управления по возможности используйте PID file descriptor. pidfd_send_signal() обращается к устойчивой ссылке и возвращает ESRCH после завершения именно этого процесса, не рискуя попасть в новый процесс после повторного использования PID.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.