2011-06-21 4 views
2

J'ai une application qui fonctionne principalement, mais j'ai une condition dans laquelle l'appel à :: popen() reçoit une erreur avec errno défini sur ENOMEM. La page de manuel pour :: popen() vous renvoie à la page pour :: fork() qui s'énumère ENOMEM avec ce bref commentaire sur Linux:Les causes pour ENOMEM de :: popen()

The fork() function may fail if: 

    ENOMEM Insufficient storage space is available. 

Je me demande si je suis vraiment à court de mémoire, ou peut-être une autre ressource comme des descripteurs de fichiers? Est-ce que fork() peut donner à ENOMEM autre chose que de manquer de mémoire sur votre système? C'est Centos4.

+0

Er? Où le tuyau (2) me renvoie-t-il à la fourche (2)? Et pourquoi les erreurs fork() seraient-elles pertinentes pour pipe()? – bdonlan

+0

Oups, merci d'avoir attrapé ça, c'est popen, pas de pipe. – WilliamKF

+1

Que dit ['strace (1)'] (http://linux.die.net/man/1/strace)? 'popen (3)' appelle 'pipe (2)' et 'fork (2)' en interne; quel appel renvoie "ENOMEM", "pipe" ou "fork"? –

Répondre

1

J'ai confirmé que l'ENOMEM résultait de ne pas appeler :: pclose() après répété :: popen() et éventuellement manquer de descripteurs de fichiers.

+1

La documentation suggère que cela devrait être 'EMFILE' ou' ENFILE', pas 'ENOMEM'. Je pense que vous devriez prendre la suggestion de @ Adam et l'exécuter sous strace pour savoir quel appel système a réellement donné l'erreur, parce que cela semble très étrange. – Nemo

Questions connexes