questo il codice (molte cose stamapte servono per il debug)
il porgramma deve creare N figli e farli attendere alemno 10 secondi. se il padre viene interrotto (ctrl+c) deve uccidere anche i figli..
codice:
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
int n=0;
int f[100];
void stoppa(){ //funzione che uccide i figli
int k;
printf("kill \n");
for(k=0;k<n;k++){
printf("Termino FORZATAMENTE figlio: %d (pid: %d)\n",k+1,f[k]);
// kill(f[k],SIGTERM);
}
}
int main()
{
int rc,i,k;
printf("Figli? \n");
scanf ("%d",&n);
printf("il processo %d crea %d figli\n",getpid(),n);
for(i=0;i<n;i++){
if((rc=fork())<0) { //crea tutti i figli, se c sono errori esci
printf("Errore creazione processi");
exit(-1);
}
if (rc==0){// se è un figlio
f[i]=getpid(); //prendi il pid e mettilo nel vettore
printf("Inizio figlio: %d (pid: %d)\n",i+1,f[i]);
printf("%d \n",f[i]);
sleep(10); //aspetta
printf("Termino figlio: %d (pid: %d)\n",i+1,f[i]); //quando termina esce
exit(0);
}
} signal(SIGINT,stoppa); sleep(10); // il programma attende 10 secondi e poi esce
for(k=0;k<n;k++) printf("figlio: %d (pid: %d)\n",k+1,f[k]); //debug
}
stefano@ubuntu:~/SO$ ./a.out
Figli?
5
il processo 9483 crea 5 figli
Inizio figlio: 1 (pid: 9484)
9484
Inizio figlio: 2 (pid: 9485)
9485
Inizio figlio: 3 (pid: 9486)
9486
Inizio figlio: 4 (pid: 9487)
9487
Inizio figlio: 5 (pid: 9488)
9488
kill
Termino FORZATAMENTE figlio: 1 (pid: 0)
Termino FORZATAMENTE figlio: 2 (pid: 0)
Termino FORZATAMENTE figlio: 3 (pid: 0)
Termino FORZATAMENTE figlio: 4 (pid: 0)
Termino FORZATAMENTE figlio: 5 (pid: 0)
figlio: 1 (pid: 0)
figlio: 2 (pid: 0)
figlio: 3 (pid: 0)
figlio: 4 (pid: 0)
figlio: 5 (pid: 0)
il problema è che in esecuzione nn tiene i pid nell'vettore