Ho scritto il seguente programma per capire come funziona la forcella quando chiamata senza wait() o waitpid().: riuso pid
int main()
{
pid_t childpid;
int retval = 0;
int i;
while(1){
//usleep(1);
childpid = fork();
if (childpid >= 0)
{
i++;
if (childpid == 0)
{
exit(retval);
}
else
{
//printf("childpid is %d\n", childpid);
}
}
else
{
printf("total no. of processes created = %d\n", i);
perror("fork");
exit(0);
}
}
}
ecco l'output ho Get->
total no. of processes created = 64901
fork: Cannot allocate memory
mi aspettavo il programma di andare avanti come sto uscendo dal processo figlio istantaneamente e fork() dovrebbe riutilizzare i pid dopo pid> pid_max. Perché non succede?
Sono sorpreso che non abbia completamente danneggiato il sistema. Di solito c'è un limite di processo utente in atto per evitare questo tipo di comportamento e bombardamenti a forcella. 'ulimit -u' dovrebbe darti un limite di processo molto ampio sul tuo sistema. questo è un grosso buco nel tuo sistema. –
ulimit -u rivela: 31488. In effetti, il programma viene eseguito anche su tentativi successivi. – Zaxter