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)
codice:#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; }

Rispondi quotando