Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    280

    [C] La waitpid che non aspetta..

    codice:
       
    
    while(1){
                    isfork = fork ();
                    if (isfork == 0)
                     {            
    execl("/bin/sleep", "sleep", "10", 0);                    
                     }
                    else
                     {              
     waitpid(isfork,&status,1);
    
                     }
    }
    Perchè in questo caso la waitpid non aspetta mai la fine dello sleep provocando un loop infinito lanciando sempre uno sleep?? controllando nei processi gli sleep vengono lanciati, per semplicità non ho scritto l'intero codice, ma in sostanza questo è il problema...
    come possi risolverlo??
    grazie anticipatamente..

  2. #2
    come ultimo parametro della execl devi passare NULL non 0 !
    Se una funzione riceve come argomento un puntatore di puntatore di puntatore quando la invochi ricordati che puo ricevere o un puntatore di puntatore di puntatore o l'indirizzo di un puntatore di puntatore

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    280
    è indifferente.. non cambia..
    alemno nel mio codice...

  4. #4
    Utente di HTML.it L'avatar di Mods
    Registrato dal
    Jun 2004
    Messaggi
    302
    Non vorrei dire una stupidata, ma secondo me è la execl che aveva certe particolarità nel sostituirsi al processo (che purtroppo in questo momento la memoria mi inganna)

    se utilizzi una "sleep(10);" anziché la execl vedrai che funziona... altrimenti c'è qualche parte del codice che non ci hai mostrato che crea il problema.
    Ci sono 10 tipi di persone al mondo: quelli che conoscono il codice binario, e quelli che non lo conoscono!

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    280
    a me non interessa fare una sleep, ho messo la sleep perchè è l'unico modo per testare se il padre aspetta il figlio.. dovrebbe funzionare per qualsiasi comando.. vi chiedo.. è possibile che sia una "limitazione" del mio linux? io uso una slackware 10.3 .

  6. #6
    non credo possa essere una limitazione del tuo linux :master:

    fai un pò queste prove:

    1 ) nel programma che invochi tramite execl mettici un for che stampi tutte le variabile ricevute in modo da avere la certezza che riceve cio che li passi !

    2) in fase di compilazione di entrambi i programmi ricevi warning?

    3) prova ad usare la execlp passandole come secondo parametro lo stesso che gli passi per primo

    4) ultima stupida prova : sostiutisci la waitpid con una wait(&stato); //attende la chiusura di un qualsiasi figlio e non di uno specifico

    . . .lo so nn sono granchè come prove ma a volte questi problemi derivano proprio da piccole sviste

    Se una funzione riceve come argomento un puntatore di puntatore di puntatore quando la invochi ricordati che puo ricevere o un puntatore di puntatore di puntatore o l'indirizzo di un puntatore di puntatore

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    280
    se metto la wait(&status) il programma funziona correttamente, però il programma che lnacio con exec diventa defunto... come posso evitare che accada??

  8. #8
    se la sostituisci nel programmino senza modificare nient'altro il programma che parte con la exec non diventa defunto ! ! !
    Il tuo programma padre (che genera il figlio) va a finire nell'else dove si metterà in attesa di un qualisiasi figlio creato ma se ne ha creato solo uno fino a quel momento aspetterà la chiusura di quello; l'uso della waitpid di solito va combinato memorizzando tuttti i pid creati ma nel tuo caso non serve . . .

    . . .se non ho capito chiedi pure
    Se una funzione riceve come argomento un puntatore di puntatore di puntatore quando la invochi ricordati che puo ricevere o un puntatore di puntatore di puntatore o l'indirizzo di un puntatore di puntatore

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    280
    in teoria è giusto quello che dici.. ma non funziona

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    80
    prova a mettere solo wait(&status)!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.