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

    [C-Linux] Segnali e processi

    Salve.
    Devo fare un programma in C che genera due processi figli: il padre genera 10 numeri casuali, se il numero è pari manda un segnale al processo figlio1, se è dispari manda un segnale al processo figlio2.
    I segnali sono gestiti con l'apposito handler.
    Io ho scritto questo, compila ma non funziona:

    codice:
    #include <signal.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void handler(int);
    
    int main(){
        int pid1,pid2;
        int cont,random_n;
        srand(time(NULL));
        /* creazione primo figlio */
        pid1 = fork();
        if(pid1 != 0){       /* se sono il padre */
            pid2 = fork();   /* genero il secondo figlio */
            if(pid2 == 0){   /* se sono il secondo figlio*/
    
               signal(SIGUSR2,handler);
               for(;;);      /* rimango in attesa del segnale */
            }
            else   /* sono il padre */
            {
                for(cont = 0;cont < 10; cont++){
                    random_n = rand();
                    if(random_n %2 == 0){
                        /* mando un segnale al primo figlio*/
                        kill(pid1,SIGUSR1);
                    }
                    else
                    {
                        kill(pid2,SIGUSR2);
                        /* mando un segnale al secondo figlio */
                    }
                }
            }
        }
        else
        {
            /* sono il primo figlio */
            signal(SIGUSR1,handler);
            for(;;);
        }
        kill(pid1,SIGKILL);
        kill(pid2,SIGKILL);
        return 0;
    }
    
    void handler(int sig){
        if(sig==SIGUSR1){
            printf("Segnale inviato al primo processo figlio\n");
            printf("Il numero e' pari\n");
        }
        else
        {
            printf("Segnale inviato al secondo processo figlio\n");
            printf("Il numero e' dispari\n");
        }
    }
    Dove ho sbagliato?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Evidenti problemi nello scheduling dei processi che non avviene nell'ordine dovuto. Mettendo una usleep(10000) o simili come prima istruzione del ciclo for nel processo padre sembra risolversi, anche se non così dignitosamente.
    every day above ground is a good one

  3. #3
    Se fossi stato in te il mio approccio al problema sarebbe stato diverso..
    1:generazione di 2 o n figli e li avrei messi in attesa
    2:Generazione dei numeri casuali da parte del padre e invio dei segnali al figlio
    Se hai bisogno(se gia' non hai risolto il problema ) puoi chiedere tranquillamente ciao

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 © 2026 vBulletin Solutions, Inc. All rights reserved.