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..
stefano@ubuntu:~/SO$ ./a.outcodice:#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 }
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![]()

Rispondi quotando