Ho un piccolissimo problema.. devo realizzare una shell, e devo implementare l'&.
& permette di far eseguire il programma, mentre la shell si può continuare ad usare. senza la & la shell resta bloccata fino a che nn termina il programma.

il codice che ho fatto è questo:
codice:
if (strcmp(argv[last(argv)],"&") != 0) //Se c'è la & devi aspettare
{ f_wait=0; 	}
 else {f_wait=1; argv[last(argv)]=NULL;} // altrimenti NON aspetti e togli la & dal vettore

 pid=fork();
  if (pid==0){//figlio
  	printf("%d \n",getpid());
	execvp(argv[0],argv);
	 }//fine if
	 else {//padre
	if (f_wait==0) {
	waitpid(pid,&status,0);
	}
fin qui fa tutto o quasi quello che deve fare, il problema è che se eseguo ad esempio gimp & e poi chiudo gimp, resta uno zombie.
come lo uccido?
metto un kill(pid) dopo il waitpid? (c'ho provato ma non funziona).
poi vorrei che stampasse, quando si mette la & il pid e il numero di figli che ho in giro, e alla chiusura dia pid e done.. come fa la shell normale..
io credevo di aggiungere
codice:
 if (pid==0){//figlio
	if (f_wait==1){
	n_zombie++;
	printf("[%d] %d \n",n_zombie,getpid());
	}
	execvp(argv[0],argv);
	}//fine if
	else {//padre
	if (f_wait==0) {
		waitpid(pid,&status,0);
		kill(pid);
		n_zombie--;
		printf("[%d] %d DONE\n",n_zombie,getpid());
    }
invece non funziona come dovrebbe..
altro problemone:mi sono accorto che lascio zombi in giro, COME DIAVOLO LI UCCIDO?

grazie