Tengo un programa que crea N procesos, donde N es el argumento de entrada dado en la línea de comandos. Traté de aumentar este valor y conseguí
fork: Resource temporarily unavailable
.
Incluso al configurar los parámetros relevantes, obtuve los mismos resultados en el mismo valor de N.
kern.maxproc
kern.maxprocperuid
Quizás hay otros lugares a los que necesito referirme para hacer más procesos en mi estación. ¿O tal vez necesito aplicar el cambio de configuración (pensé que se hizo automáticamente)?
Parece que fork
devuelve errno = 23
lo que significa:
#define ENFILE 23 /* Too many open files in system */
También intenté aumentar los siguientes valores pero no ayudó (aunque dudo que sea relevante, ya que mis procesos son simples y no tienen acceso a ningún archivo)
maxflies
maxfilesperproc
Además, reiniciar la máquina para que la nueva configuración sea efectiva, no ayudará en este caso, ya que los parámetros que he modificado vuelven al valor predeterminado.
El código fuente de mi programa:
void DoWorkInChild() {
sleep(10);
}
int main (int argc, char *argv[]) {
pid_t pids[100000];
int i;
int n = atoi(argv[1]);
printf("I'm grandParent %d n = %d \n", getpid(), n);
/* Start children. */
for (i = 0; i < n; ++i) {
if ((pids[i] = fork()) < 0) {
printf("errno = %x \n", errno);
perror("fork");
abort();
} else if (pids[i] == 0) {
DoWorkInChild();
exit(0);
} else {
printf("I'm process %d \n", pids[i]);
}
}
/* Wait for children to exit. */
int status;
pid_t pid;
while (n > 0) {
pid = wait(&status);
printf("Child with PID %ld exited with status 0x%x.\n", (long)pid, status);
--n;
}
}