Quelles sont les conditions qui peuvent provoquer fork() ou system() appelle à échouer sur Linux?

Et comment peut-on savoir si l'un d'eux se produisent, et conduisant à une erreur renvoyé par fork() ou system()? En d'autres termes, si la fourche() ou system() retourne un code d'erreur, ce sont quelques choses dans Linux que je peux vérifier à diagnostiquer la raison de cette erreur est-il passé?

Par exemple:

  • Tout simplement de la mémoire (les résultats dans errno ENOMEM) - vérifier l'utilisation de la mémoire avec "libre", etc.
  • Pas assez de mémoire pour le noyau d'une copie de la page des tableaux et d'autres informations comptables des processus parent (résultats dans errno EAGAIN)
  • Est-il un processus global de limite? les résultats sont présentés dans errno EAGAIN aussi?)
  • Est-il par utilisateur nombre maximum de processus? Comment puis-je savoir ce que c'est?
  • ...?
Pour préciser, quand on sait qu'une erreur EAGAIN a eu lieu au cours de fork() (errno == EAGAIN), comment pouvez-vous savoir précisément ce qui a causé il (était-il RLIMIT_NPROC? Était-ce une erreur lors de la copie de la page de tableaux, ou de la tâche scructure, et si oui, pourquoi? Et comment l'éviter?)
J'ai aussi demandé à un autre, mais une question relative à la page " a propos des tables dans Linux: stackoverflow.com/questions/853736/...

OriginalL'auteur Reed Hedges | 2009-05-12