PDA

Visualizza la versione completa : [C] Pid vivo o pid morto?


destroyah
22-04-2008, 19:42
Buongiorno, lo s, sto cominciando a essere una piaga, ma questo dovrebbe essere l'ultimo suggerimento per un p :mame: :mame: 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?

mondobimbi
23-04-2008, 08:52
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

menphisx
23-04-2008, 09:02
Una domanda: ma wait non da errore se il processo morto ? E kill ?

Dr_House
24-04-2008, 15:58
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.

destroyah
25-04-2008, 13:42
Grazie dr. House! Ancora una volta non lupus! :D :D :D :D :D :D :D :D
In realt grazie a tutti, solo la soluzione con i segnali la pi semplice... :)

Dr_House
25-04-2008, 20:39
ahahahah Di nulla figurati =D

Loading