Visualizzazione dei risultati da 1 a 2 su 2

Discussione: eserc segnali

  1. #1

    eserc segnali

    devo risolvere un esercizio assegnatomi:

    Il segnale SIGTERM viene catturato due volte da un processo figlio. La prima volta viene invocata
    una routine di servizio, la seconda viene ripristinata l'azione di default (terminazione).


    ecco qui il codice ma purtroppo non mi funziona.dove sbaglio?

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <signal.h>
    
    
    void catturaTERM(int sig){ //Funzione per catturare il segnale
    	printf("Ho catturato il segnale %d\n", sig);
    }
    
    void ripristinaTERM(int sig){
    	struct sigaction action;
    	action.sa_handler=SIG_DFL;
    	printf("Ho ripristinato il comportamento di default");
    }
    
    int main ()
    {
    
    	pid_t pid;
    	struct sigaction action;
    	struct sigaction action_1;
    	int i,childstatus;
    	
    	
    	action.sa_handler=catturaTERM; //setto la routine di servizio
    
    	action_1.sa_handler=ripristinaTERM;
    	
    	pid=fork();
    	
    		if(pid<0){
    			perror("Creazione fork fallita!\n");
    			exit(-1);
    		}
    		else if(pid==0){
    			for(i=0;i<2;i++){
    				if(i=0){
    					sigaction(SIGTERM,&action,0);
    				}
    				else {
    					sigaction(SIGTERM,&action_1,0);
    				}
    			}
    		}
    		else{
    			for(i=0;i<2;i++){
    				if(i=0){
    					printf("Invio il segnale la prima volta\n");
    					kill(pid,SIGTERM);
    				}
    				else {
    					printf("Invio il segnale la seconda volta\n");
    					kill(pid,SIGTERM);
    					
    				}
    			}
    			
    			pid=wait(&childstatus);
    			if(WIFEXITED(childstatus))
    				printf("Il processo figlio ha finito di eseguire correttamente!\n");
    			else
    				printf("Il processo figlio ha terminato in modo anomalo!\n");
    		
    		}		
    	
    }

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

    Moderazione

    Originariamente inviato da mazzy89
    ecco qui il codice ma purtroppo non mi funziona.dove sbaglio?
    Il linguaggio di riferimento va indicato anche nel titolo; inoltre, dire "non funziona" è insufficiente, poiché va specificato l'errore o il comportamento anomalo che ottieni.

    Apri una nuova discussione seguendo queste indicazioni e quelle contenute nel Regolamento.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

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.