Pages: [1]   Go Down
Print
Author Topic: pid di processi  (Read 1428 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
rox
Forumista
***
Offline Offline

Posts: 633


« on: 20-06-2011, 10:44:15 »

stavo provando a farmi tornare i pid dei processi e di " giocare" un pochetto andando a vedere il padre e il figlio di ogni processo, ma il codice che è ho scritto mi dà dei risultato inaspettati ...addirittura mi compare un pid=1 e per quanto ne so non dovrebbe essere possibile una cosa del genere visto che l'unico ad avere pid=1 è la init...

questo è il codice :


Code:

#include <stdio.h>
#include <stdlib.h>

int main()
{
//vedo il pid del processo corrente
pid_t p;
p=getpid();
printf("il pid del processo corrente è %d\n",p);


//creo un processo
pid_t figlio1;
figlio1=fork();
printf("il pid del processo figlio1 è %d\n",figlio1);
pid_t padre;
padre=getppid();
printf("il pid del padre di figlio1 è %d \n",padre);
}

e questo l'output:
Code:
il pid del processo corrente è 410
il pid del processo figlio1 è 411
il pid del padre di figlio1 è 202
il pid del processo figlio1 è 0
il pid del padre di figlio1 è 1

ovviamente le prime 2 righe cambiano,ma non capisco perchè le altre 3 righe rimangono tali... non dovrebbero cambiare anche loro in base ai risultati delle prime 2 righe?? cosa avviene effettivamente nel codice? non ho capito ...
Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.476


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #1 on: 20-06-2011, 14:59:02 »

Quando usi fork viene lanciato un nuovo processo con la stessa memoria allocata del primo (cioè altra memoria ma con gli stessi dati). L'unico dato diverso è il valore restituito dalla fork, che nel caso del padre è il PID del figlio, mentre nel caso del figlio è 0.

Il modo migliore di gestire i due casi (cosa deve fare il padre e cosa deve fare il figlio) è fare una scelta in base al valore restituito da fork, come in questo caso:
Code:
#include <stdio.h>
#include <stdlib.h>

int main()
{
pid_t risultato;
risultato=fork();
if (risultato == 0)
printf("sono il figlio: il mio pid (di figlio) è %d e quello di mio padre è %d... ciao papà :D\n", getpid (), getppid ());
else
printf("sono il padre: il mio pid (di padre) è %d e quello di mio figlio è %d... ciao figliuolo :)\n", getpid (), risultato);
}
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
rox
Forumista
***
Offline Offline

Posts: 633


« Reply #2 on: 21-06-2011, 00:18:07 »

ok grazie
Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
Pages: [1]   Go Up
Print
Jump to: