PDA

View Full Version : [C] Linux, processi e FORK


Rsk
27-01-2010, 13:22
Ragazzi dovrei realizzare un ciclo che mi crea vari processi, ai quali in seguito attribuirò un lavoro da compiere ma ho un problema..
Realizzando il tutto con un ciclo me ne crea molti e l'array che dovrebbe contenere i pid viene sovrascritto dai vari processi, questo perchè probabilmente il for viene rieseguito da ogni processo che creo.
questo è il codice.

for(i=0;i<NUM_PROCESSI;i++)
{

switch(lista[i]=fork())
{

case -1:

perror("Errore nell'esecuzione della fork.");

exit(1);

case 0:
lista[i]=getpid();
//printf(" lista [%d] = %d",i,lista[i]);
break;



}




}
for(i=0;i<NUM_PROCESSI;i++) printf(" lista [%d] = %d",i,lista[i]);

Sapete aiutarmi?

GioVesas
27-01-2010, 15:48
Se non ricordo male fork ritorna:
-1 in errore
0 per il child
> 0 per il parent.

Quindi io farei cosi:

bool bParent=false;

for(i=0;i<NUM_PROCESSI;i++)
{

switch(lista[i]=fork())
{

case -1:

perror("Errore nell'esecuzione della fork.");

exit(1);

case 0:
bParent=false;
break;
default:
bParent=true;
lista[i]=getpid();
//printf(" lista [%d] = %d",i,lista[i]);
break;
}
if ( bParent==false)
goto somewhere; // non molto elegante, sbrigativa come esempio


}
for(i=0;i<NUM_PROCESSI;i++) printf(" lista [%d] = %d",i,lista[i]);

YuYevon
27-01-2010, 16:32
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>

#define NUM_PROCESSI 10
#define NOP ;

int main(void)
{
unsigned int i;
pid_t pids[NUM_PROCESSI];

for (i = 0; i < NUM_PROCESSI; i++) {
switch (pids[i] = fork()) {

case -1:
fprintf(stderr, "Errore: %s\n", strerror(errno));
exit(errno);
case 0:
/* fai qualcosa */
exit(EXIT_SUCCESS);
default:
/* fai qualcosa di diverso */
NOP
}
}

printf("I pid dei processi creati sono:\n");
for (i = 0; i < NUM_PROCESSI; i++) {
printf("%d ", pids[i]);
}

putchar('\n');

return EXIT_SUCCESS;
}

Rsk
28-01-2010, 11:30
Grazie ragazzi.. ma funzionano tutti come il mio.. i processi vengono creati, ma se guardo nel monitor di sistema i processi creati sono più del doppio di quelli richiesti