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;
}
}