EAGAIN (errno 11)

errno 11

LINUX

Message officiel (tel qu'affiché à l'écran) : Try again

Aussi recherché sous la forme : Resource temporarily unavailable, errno 11, EWOULDBLOCK

Terminal Linux exécutant strace, avec l'appel système en échec et l'errno mis en évidence
errno Linux : tracez l'appel système exact qui échoue avant de modifier quoi que ce soit.

Ce que cela signifie

EAGAIN, « Resource temporarily unavailable » (errno 11 sous Linux, même valeur que EWOULDBLOCK), signifie que l’opération n’a pas pu se terminer pour l’instant mais pourra réussir plus tard. Les sockets non bloquants le renvoient quand aucune donnée n’est prête ; fork() et la création de threads le renvoient lorsque les limites de processus ou de threads sont atteintes.

S'applique à : Linux, macOS (errno BSD), WSL, Conteneurs Docker

Comment corriger EAGAIN (errno 11)

  1. Dans le code d’E/S non bloquantes, traitez EAGAIN comme « réessayez plus tard » et attendez avec poll/epoll/select au lieu d’y voir un échec
  2. Si fork ou la création de threads échoue, vérifiez les limites avec 'ulimit -u' et 'cat /proc/sys/kernel/threads-max', et comptez les threads avec 'ps -eLf | wc -l'
  3. Sous systemd, vérifiez la valeur TasksMax du service avec 'systemctl show <service> -p TasksMax' et augmentez-la dans le fichier d’unité si c’est justifié
  4. Dans les conteneurs, vérifiez la limite de PID ('--pids-limit' dans Docker ou les paramètres de PID du pod)
  5. Recherchez une fuite de threads ou de processus dans l’application si leur nombre ne cesse de croître
  6. Pour « resource temporarily unavailable » sur les verrous d’apt ou dpkg, attendez la fin de l’autre gestionnaire de paquets au lieu de supprimer les fichiers de verrouillage

Pourquoi cela se produit

Le noyau utilise EAGAIN pour les opérations qui bloqueraient ou dépasseraient temporairement une limite : sockets ou tubes non bloquants vides, limites de processus par utilisateur épuisées, limites de PID des cgroups, ou verrous détenus par un autre processus.

FAQ

EAGAIN est-elle une erreur que je dois corriger ?

Avec des E/S non bloquantes, elle est normale et signifie simplement « pas encore de données ». Avec fork ou les threads, elle signale une limite et demande votre attention.

EAGAIN est-elle identique à EWOULDBLOCK ?

Sous Linux, elles ont la même valeur (11). macOS utilise 35 pour les deux.

Erreurs liées

Source : Linux kernel errno.h · solutions rédigées et vérifiées par les éditeurs (voir notre politique éditoriale)

Dernière mise à jour :