1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| /* Retourne 0 pour OK, -1 pour échec. */
int createProcess(char const * cmd)
{
int pidFils = fork();
if(pidFils == -1)
return -1; /* erreur. */
if(pidFils == 0)
{
/* Fils. */
execlp(cmd, cmd, NULL);
perror("exec");
exit(1);
}
/* Père. */
return 0;
}
int main(void)
{
char const * const tabCommande[10] = {...};
int z;
int nbProc = 0;
for(z=0 ; z<10 ; z++)
{
if(nbProc == 4)
{
wait(NULL);
nbProc--;
}
if( createProcess(tabCommande[z]) < 0 )
{
/* Erreur. */
}
else
{
/* OK, processus créé. */
nbProc++;
}
}/* For. */
/* Et maintenant, on atttend la fin des processus restants. */
while( nbProc > 0 )
{
wait(NULL);
nbProc--;
}
return 0;
} |