Impostazione del numero massimo di processi in esecuzione

-1

Ho un programma che crea N processi, dove N è argomento di input dato in linea di comando. Ho provato ad aumentare questo valore e ottenuto fork: Resource temporarily unavailable .

Anche quando ho impostato i parametri pertinenti ho ottenuto gli stessi risultati sullo stesso valore di N.

kern.maxproc
kern.maxprocperuid 

Forse ci sono altri posti di cui ho bisogno per fare riferimento a fare più processi nella mia stazione O forse ho bisogno di applicare la modifica della configurazione (pensavo che sia stata eseguita automaticamente)?

Sembra che fork restituisca errno = 23 che significa:

#define ENFILE      23      /* Too many open files in system */

Ho anche provato ad aumentare i seguenti valori ma non ha aiutato (anche se dubito che sia rilevante, dato che i miei processi sono semplici e non accedono a nessun file)

maxflies
maxfilesperproc

Inoltre, riavviare la macchina per rendere effettiva la nuova configurazione, non sarà di aiuto in questo caso, poiché i parametri che ho modificato tornano al valore predefinito.

Il mio codice sorgente del programma:

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

1 risposta

0

Fortunatamente, ho trovato il seguente script che dovrebbe essere eseguito prima dei test di benchmark xnu.

#!/bin/sh

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

echo Done.

Ora funziona, ma non è ancora possibile vedere cambiamenti in / etc / sysctl ... Mi chiedo quale configurazione ha cambiato alla fine ...

    
risposta data 28.08.2016 - 13:56
fonte

Leggi altre domande sui tag