Salve a tutti sono nuovo del forum e ho un problema con un programma per la gestione di processi.
Il programma che devo fare richiede in ingresso un numero N di argomenti compresi tra 3 e 10 e il valore di ogni argomento deve essere contenuto tra 1 e 4.
Il processo padre dovrà creare N processi figli ognuno dei quali dovrà aspettare un numero casuale di tempo compreso tra 1 e 5 secondi stamperanno un messaggio e terminano.
Ad ogni processo figlio sarà assegnato un argomento che è stato passato inizialmente e ogni volta che un processo figlio sarà terminato il processo padre dovrà decrementare il valore corrispondente al processo figlio terminato.
Se il valore decrementato è maggiore o uguale di 1 dovrà creare un nuovo processo figlio con le caratteristiche menzionate precedentemente altrimenti se è uguale a zero il processo padre dovrà creare un figlio che esegue un programma /usr/bin/xmessage con argomento il figlio e termina.
Il programma padre terminerà quando quanto tutti i figli sono terminati o che non è possibile creare altri processi (i valori N relativi a ciascun figlio sono uguali a: -1)
Ho fatto un abbozzo di codice vi volevo chiedere se potevate darmi una mano dato che sto imparando ora a programmare grazie in anticipo(non è concluso manca la stampa a video finale del padre)
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>
int main(int argc,char *argv[])
{
int status,pid,i,t,a;
if(argc < 5 || argc > 11)
{
printf("Numero di argomenti errato\n");
exit(-1);
}
for(i=1;i<=argc;i++)
{
if((a=atoi(argv[i]))<1 || (a=atoi(argv[i]))>4)
{
printf("Errore valore argomenti\n");
exit(-2);
}
}
for(i=1;i<=argc;i++)
{
if((pid=fork())==0)
{
int N=atoi(argv[i]);
srand(time(NULL));
t = rand() % 5 + 1;
sleep(t);
exit(N);
}
else
{
wait(&status);
status=status-1;
if(status>=1)
{
if((pid=fork())==0)
{
srand(time(NULL));
t = rand() % 5 + 1;
sleep(t);
exit(status);
}
}
if(status==0)
{
if((pid=fork())==0)
{
execvp("/usr/bin/xmessage",getpid());
exit(0);
}
}
else
exit(-3);
}
}
return 0;
}