Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C] Pid vivo o pid morto?

    Buongiorno, lo sò, sto cominciando a essere una piaga, ma questo dovrebbe essere l'ultimo suggerimento per un pò il punto è:
    Come faccio a sapere se un processo figlio con un determinato pid è ancora in esecuzione? Conosco la funzione wait, ma in questo caso vorrei che il padre non si mettesse ad aspettare il figlio, dovrebbe essere un controllo del tipo se non è ancora morto, lo uccido. Un altra limitazione è che subito dopo la fork il figlio lancia un execl quindi proprio non ho idee.
    In che modo posso verificare se il figlio è morto?

  2. #2
    un sistema potrebbe essere quello di leggere la directory /proc che contiene i dati di tutti i processi. Devi entrare nella directory che ha come nome il pid che vuoi esaminare.
    ciao
    sergio

  3. #3
    Una domanda: ma wait non da errore se il processo è morto ? E kill ?

  4. #4
    Infatti si. weit torna -1 se il processo che attende è finito.

    Se non vuoi che il padre sia bloccato, devi procedere con la gestione dei segnali.

    In altre parole devi catturare il segnale di terminazione del figlio ovvero SIGCHLD e gestire come meglio credi la situazione.

    Ad esempio per quanto riguarda il codice del padre, inserisci questa riga dopo le fork:


    signal(SIGCHLD, SIG_IGN);

    Che serve per indicare che il segnale di terminazione deve essere ignorato.

    Qualora non lo volessi ignorare, scrivi una subrutine che la gestisca e sostituisci la sua intestazione a SIG_IGN.

  5. #5
    Grazie dr. House! Ancora una volta non è lupus!
    In realtà grazie a tutti, solo la soluzione con i segnali è la più semplice...

  6. #6
    ahahahah Di nulla figurati =D

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 © 2024 vBulletin Solutions, Inc. All rights reserved.