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;
}