I have written a C code, where the aim is to take N as an input and then create N processes and create some children of their own. Finally, each process sends each other SIGUSR1 signal after every 2 second. The idea is to close all the process after 10 seconds using SIGALRM but the program doesn’t terminate. If a take N as an input through command line, the program works but if taken through scanf, it somehow breaks. TIA
int main(void){
int n;
printf("enter N - ");
scanf("%d", &n);
int id1 = 1, id2 = 1; //////// ids for tracking the process
for(int i = 0; i<n; ++i){
if(id1>0 && id2>0){ /////// only the grandparent can enter
id1 = fork();
int z = getpid()%13;
for(int j = 0; j<z; ++j){
if(id2>0 && id1==0) //////// only the parent can enter
id2 = fork();
}
}
}
alarm(10); ///////// alarm for 10 seconds after which process stops sending SIGUSR1 and exits
while(1){ /////// SIGUSR1 signal
sleep(2);
for(int i = 1; i<13; ++i)
kill(getpid()+i, SIGUSR1);
}
for(int i = 0; i<n*13; ++i)
wait(NULL);
}
```