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