Configuración del número máximo de procesos en ejecución

-1

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;          
    }
}
    
pregunta Zohar81 28.08.2016 - 12:33

1 respuesta

0

Afortunadamente, he encontrado la siguiente secuencia de comandos que debe ejecutarse antes de las pruebas de referencia de xnu.

#!/bin/sh

echo Raising process limits
echo limit maxproc 1000 2000 >> /etc/launchd.conf

echo Done.

Ahora está funcionando pero aún no puede ver ningún cambio en / etc / sysctl ... Me pregunto qué configuración cambió con el tiempo ...

    
respondido por el Zohar81 28.08.2016 - 13:56

Lea otras preguntas en las etiquetas