Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Sistemi Operativi, 9 CFU => Topic started by: FReddy on 22-06-2012, 09:40:57



Title: [Risolto] dubbio fork.c
Post by: FReddy on 22-06-2012, 09:40:57
Salve a tutti,

ho compilato il file fork.c, presente nella collezione di esempi del professore, e l'ho eseguito più volte in successione.

Qualcuno mi sa spiegare perché la restituzione del pid del padre, nella seconda riga di ogni output, in alcuni casi da il valore corretto ed in altri restituisce 1?

Ecco l'output:

Quote
freddy@freddy:~/Scrivania/sistem_operativi/esempi_programmazione_unix$ ./fork
PID del processo iniziale: 3904
Sono il processo PADRE [3904] e mio figlio ha PID 3905.
Sono il processo FIGLIO [3905] e mio padre ha PID 1.
freddy@freddy:~/Scrivania/sistem_operativi/esempi_programmazione_unix$ ./fork
PID del processo iniziale: 3919
Sono il processo PADRE [3919] e mio figlio ha PID 3920.
Sono il processo FIGLIO [3920] e mio padre ha PID 3919.
freddy@freddy:~/Scrivania/sistem_operativi/esempi_programmazione_unix$ ./fork
PID del processo iniziale: 3921
Sono il processo PADRE [3921] e mio figlio ha PID 3922.
Sono il processo FIGLIO [3922] e mio padre ha PID 1.
freddy@freddy:~/Scrivania/sistem_operativi/esempi_programmazione_unix$ ./fork
PID del processo iniziale: 3923
Sono il processo PADRE [3923] e mio figlio ha PID 3924.
Sono il processo FIGLIO [3924] e mio padre ha PID 1.
freddy@freddy:~/Scrivania/sistem_operativi/esempi_programmazione_unix$ ./fork
PID del processo iniziale: 3925
Sono il processo PADRE [3925] e mio figlio ha PID 3926.
Sono il processo FIGLIO [3926] e mio padre ha PID 1.
freddy@freddy:~/Scrivania/sistem_operativi/esempi_programmazione_unix$ ./fork
PID del processo iniziale: 3927
Sono il processo PADRE [3927] e mio figlio ha PID 3928.
Sono il processo FIGLIO [3928] e mio padre ha PID 1.
freddy@freddy:~/Scrivania/sistem_operativi/esempi_programmazione_unix$ ./fork
PID del processo iniziale: 3929
Sono il processo PADRE [3929] e mio figlio ha PID 3930.
Sono il processo FIGLIO [3930] e mio padre ha PID 3929.
freddy@freddy:~/Scrivania/sistem_operativi/esempi_programmazione_unix$ ./fork
PID del processo iniziale: 3931
Sono il processo PADRE [3931] e mio figlio ha PID 3932.
Sono il processo FIGLIO [3932] e mio padre ha PID 3931.
freddy@freddy:~/Scrivania/sistem_operativi/esempi_programmazione_unix$ ./fork
PID del processo iniziale: 3933
Sono il processo PADRE [3933] e mio figlio ha PID 3934.
Sono il processo FIGLIO [3934] e mio padre ha PID 1.
freddy@freddy:~/Scrivania/sistem_operativi/esempi_programmazione_unix$ ./fork
PID del processo iniziale: 3935
Sono il processo PADRE [3935] e mio figlio ha PID 3936.
Sono il processo FIGLIO [3936] e mio padre ha PID 1.
freddy@freddy:~/Scrivania/sistem_operativi/esempi_programmazione_unix$ ./fork
PID del processo iniziale: 3937
Sono il processo PADRE [3937] e mio figlio ha PID 3938.
Sono il processo FIGLIO [3938] e mio padre ha PID 3937.
freddy@freddy:~/Scrivania/sistem_operativi/esempi_programmazione_unix$ ./fork
PID del processo iniziale: 3939
Sono il processo PADRE [3939] e mio figlio ha PID 3940.
Sono il processo FIGLIO [3940] e mio padre ha PID 1.
freddy@freddy:~/Scrivania/sistem_operativi/esempi_programmazione_unix$


Title: Re:dubbio fork.c
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 22-06-2012, 10:24:46
A volte per come sono schedulati i processi sulla tua macchina, può capitare che il padre muoia (termini) prima che il figlio abbia eseguito la sua invocazione di getppid. In tal caso, il processo figlio orfano viene immediatamente adottato come figlio dal processo init, che ha process id = 1.

Per evitare che capiti questa situazione, prova a mettere sleep (1) (sleep si trova in unistd.h) prima di exit (0).

Buona giornata .smile.


Title: Re:dubbio fork.c
Post by: FReddy on 22-06-2012, 11:23:45
Grazie. Sei stato chiarissimo  .applausi