EAGAIN (errno 11)

errno 11

LINUX

Messaggio ufficiale (come appare sullo schermo): Try again

Cercato anche come: Resource temporarily unavailable, errno 11, EWOULDBLOCK

Terminale Linux che esegue strace con la chiamata di sistema non riuscita e l'errno evidenziati
errno di Linux: individua la chiamata di sistema che fallisce prima di modificare qualsiasi cosa.

Che cosa significa

EAGAIN, «Resource temporarily unavailable» (errno 11 su Linux, stesso valore di EWOULDBLOCK), significa che l'operazione non può essere completata subito ma potrebbe riuscire più tardi. I socket non bloccanti lo restituiscono quando non ci sono dati pronti; fork() e la creazione di thread lo restituiscono quando si raggiungono i limiti di processi o thread.

Si applica a: Linux, macOS (errno BSD), WSL, Container Docker

Come risolvere EAGAIN (errno 11)

  1. Nel codice di I/O non bloccante, tratta EAGAIN come «riprova più tardi» e attendi con poll/epoll/select invece di considerarlo un errore
  2. Se fork o la creazione di thread falliscono, controlla i limiti con 'ulimit -u' e 'cat /proc/sys/kernel/threads-max' e conta i thread con 'ps -eLf | wc -l'
  3. Con systemd, controlla TasksMax del servizio con 'systemctl show <service> -p TasksMax' e aumentalo nel file di unità se giustificato
  4. Nei container, controlla il limite di PID ('--pids-limit' in Docker o le impostazioni PID del pod)
  5. Cerca perdite di thread o processi nell'applicazione se il conteggio continua a crescere
  6. Per «resource temporarily unavailable» sui lock di apt o dpkg, attendi che l'altro processo del gestore di pacchetti termini invece di eliminare i file di lock

Perché succede

Il kernel usa EAGAIN per le operazioni che si bloccherebbero o supererebbero temporaneamente un limite: socket o pipe non bloccanti vuoti, limiti di processi per utente esauriti, limiti PID dei cgroup o lock detenuti da un altro processo.

Domande frequenti

EAGAIN è un errore da correggere?

Con l'I/O non bloccante è previsto e significa solo «ancora nessun dato». Con fork o thread segnala un limite e richiede attenzione.

EAGAIN è uguale a EWOULDBLOCK?

Su Linux hanno lo stesso valore (11). macOS usa 35 per entrambi.

Errori correlati

Fonte: Linux kernel errno.h · soluzioni scritte e verificate dalla redazione (vedi la nostra politica editoriale)

Ultimo aggiornamento: