ciao a tutti.Spero che tra di voi ci sia qualcuno che mi possa aiutare.COmunque lo scopo di questo programma è quello di creare una sorta di ruba bandiera tra i processi.Si creano 2 squadre di processi con un numero di processi passato per argomento e poi vengono creati dal padre.
Successivamente il padre invia la SIGUSR1 a tutti i processi ma solo quelli interessati devono riicevere il msg(esempio 2 squadre da 3 processi,se chiamata=0 vengono chiamati 0 e 3)
SI esegue il test della squadra e chi vince prende il punto.Il problema è che il programma che ho scritto ,dopo la kill,termina...Suggerimenti??
codice:#include <signal.h> #include <time.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> void ricezionemsg(int signo); int punt1=0; int punt2=0; int flag=0; int N; int processo; int chiamata; int main(int argc,char * argv[]){ N=atoi(argv[1]); //printf("tutto ok %d \n ",N); int i; int pid; for(i=0;i<N*2;i++){ pid=fork(); //if(pid>0)printf("ciao sono il padre"); if(pid==0){ signal(SIGUSR1,ricezionemsg); processo=i; printf("Io sono il processo con pid %d e numero %d con valore del pid %d \n",getpid(),processo,pid); pause(); } } int gruppo; srand(time(NULL)); if(pid>0){ sleep(5); //gruppo=getpgid(0); chiamata=rand()%(N); printf("rand %d ",chiamata); kill(0, SIGUSR1); wait(NULL); printf("il punteggio di 1 è %d il punteggio di 2 è %d \n",punt1,punt2); } } void ricezionemsg(int signo){ if(processo!=chiamata|processo!=(chiamata+N))exit(0); if(flag==0){ flag=1; if(processo>N)punt2++; else punt1++; printf("funziona"); exit(2); } }

Rispondi quotando