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

}