Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Problema con gestione dei processi

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

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,314

    Moderazione

    Il linguaggio va indicato anche nel titolo, come da Regolamento.

    Qui l'ho aggiunto io, in futuro provvedi tu.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Nessuno mi può dare una mano?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.