Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 27
  1. #1

    un padre genera 3 figli

    salve,
    non sono un esperto di linux, però mi è stato chiesto di creare 3 figli SOLO da un padre..
    questo codice che riporto sotto ha il difetto che anche i figli a loro volta generano un proprio figlio
    codice:
    #include<stdio.h>
    #include<sys/types.h>
    #define N 2 
    main()
     {int id,i;
       for(i=0;i<N;i++)
        {id = fork();
         if (id == 0) /* processo figlio */
         {printf("\n(figlio %d) il mio id= %d\n",i,getpid());
          printf("\n(figlio) id di mio padre = %d\n"i,getppid());
         }
       else /* processo padre */
        {printf("\nsono il padre; risultato della fork = %d\n",n);
          printf("\n(padre) mio id= %d\n",getpid());
         }
      }
    so anche che per evitare tutto cio, devo fare in modo che se sono figli devo usare la funzione exit()

    il problema è che non so fare questa modifica! qualcuno potrebbe aiutarmi?

  2. #2
    A parte che il tuo codice genera un po di errori, solitamente è sempre meglio chiamare una exit(0) all'interno della condizione in cui crei il processo.
    Vedi un po se questo codice ti schiarisce le idee;
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    #define NPR 3
    
    int main(void)
    {
    	int i;
    	pid_t pid[3]; /*array di processi*/
    	
    	printf("I am the parent process with PID %d\n", getpid());
    	
    	for(i=0;i<NPR;i++)
    	{
    		 if((pid[i]=fork())==0)
    		 {
    		   printf("I am the son process with PID %d and my parent is %d\n", getpid(), getppid());
    		   exit(0);
                     }
    	}
    	return 0;
    }
    Output:
    ~/Desktop$ gcc p.c -o p
    ~/Desktop$ ./p
    I am the parent process with PID 7000
    I am the son process with PID 7001 and my parent is 7000
    I am the son process with PID 7002 and my parent is 7000
    I am the son process with PID 7003 and my parent is 7000
    ~/Desktop$

  3. #3
    Grazie simo_us la tua spiegazione è stata perfetta con tanto di esempio di esecuzione...GRAZIE DAVVERO!!!

  4. #4

    Re: un padre genera 3 figli

    Originariamente inviato da giak.84
    mi è stato chiesto di creare 3 figli SOLO da un padre..
    nel mondo dei computer si ragiona SOLO in potenza di due... ;-)

  5. #5

    Re: Re: un padre genera 3 figli

    Originariamente inviato da MacApp
    nel mondo dei computer si ragiona SOLO in potenza di due... ;-)
    Hai ragione MacApp, però il discorso cambia nel mondo dell'università..specialmente del Sud, dove se ne fregano della pratica e di ciò che chiede il mondo del lavoro!!
    dove si buttano a capofitto su teoria o su tecniche arcaiche o su tecniche che avranno fine solo per passare l'esame ..è di una tristezza ma intanto è questo! un giorno dovranno spiegarmi di cosa me ne faccio degli algoritmi genetici se poi non so programmare in java!!!
    cmq grazie per l'annotazione!!!!

  6. #6
    Grazie simo_us la tua spiegazione è stata perfetta con tanto di esempio di esecuzione...GRAZIE DAVVERO!!!
    Di niente figurati! E' stato un piacere!

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326

    Re: Re: Re: un padre genera 3 figli

    Il concetto è che, se non fai terminare l'i-esimo processo con una exit(), questo continuerà la sua esecuzione dopo l'else (che viene eseguito in maniera esclusiva dal processo padre) e genererà dunque anch'esso dei processi figli. Un esercizio interessante da fare (per comprendere la logica della gerarchia dei processi) sarebbe chiedersi ciascun processo figlio, a sua volta, quanti altri ne avrebbe generati senza la modifica della exit() (non tre di certo).

    Comunque

    [OT]
    Originariamente inviato da giak.84
    specialmente del Sud, dove se ne fregano della pratica e di ciò che chiede il mondo del lavoro!!
    dove si buttano a capofitto su teoria o su tecniche arcaiche o su tecniche che avranno fine solo per passare l'esame ..è di una tristezza ma intanto è questo! un giorno dovranno spiegarmi di cosa me ne faccio degli algoritmi genetici se poi non so programmare in java!!!
    Vorrei spezzare una lancia a favore della sempre più umiliata università italiana, in particolare del Sud Italia.
    Innanzitutto ti dico che non puoi generalizzare così. Ci sono corsi di laurea in informatica in cui si studiano anche Java e .NET (da me a Napoli, ad esempio), e in tutta sincerità ti dico che forse sarebbe meglio non farli, ma questa è solo una mia trascurabile considerazione. Ora la domanda da porsi è: una facoltà scientifica (perché ricordiamo che l'informatica è una scienza) deve formare lavoratori da dare in pasto alle aziende o scienziati?
    Tra l'altro, se hai appena cominciato a studiare programmazione di sistema su Linux, cosa ti aspettavi di realizzare? E' chiaro che gli esercizi proposti sono sempre di natura didattica e risultano essere tanto bizzarri quanto inutili. A me capitò addirittura di realizzare una struttura di processi ad albero ternario (btw, non è vero che in informatica si ragiona sempre a potenze di due; non ad alto livello, almeno) creando una procedura ricorsiva. Un esercizio certamente assurdo, inutile, ma di un grande potenziale didattico, innegabilmente.

    In tutta sincerità, se dovesse capitarmi (come succede al Politecnico di Milano, parola di chi lo frequenta) di studiare C, C++ e programmazione di sistema su Unix per la prima volta all'interno di un singolo corso mi guarderei bene dal definire buono il mio ateneo, o comunque la mia facoltà. E stiamo parlando di un'università del Nord, tra le più blasonate e... finanziate.
    [/OT]
    every day above ground is a good one

  8. #8
    mi unisco al topic (se pure vecchiotto) dato che anche io sto affrontando questo argomento.la cosa pazzesca e molto strana è che pur copiando lo stesso codice ottengo un output diverso.


    codice:
    Inizio programma
    Processo Padre: [600]
    Sono il processo figlio PID=[601] generato dal padre PID=[600]
    Sono il processo figlio PID=[602] generato dal padre PID=[1]
    perché invece di ottenere il PID del procesos padre ottengo 1?che vuol dire?eppure il codice è lo stesso a quello proposto

    codice:
    include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    
    #define NPR 2
    
    int main (void)
    {
    	int i;
    	pid_t child_pid[2];
    	
    	printf("Inizio programma\n");
    	
    	printf("Processo Padre: [%d]\n", getpid());
    	
    	for(i=0;i<NPR;i++)
    	{
    		if((child_pid[i]=fork())==0) //ci troviamo nel contesto del figlio
    		{
    				printf("Sono il processo figlio PID=[%d] generato dal padre PID=[%d]\n", (int) getpid(), (int) getppid());
    				exit(0);
    		}
    	}
    	return 0;
    }

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469

    Re: Re: Re: un padre genera 3 figli

    Originariamente inviato da giak.84
    un giorno dovranno spiegarmi di cosa me ne faccio degli algoritmi genetici se poi non so programmare in java!!!
    è un vecchio thread, ma ti servira 10000 volte più conoscere "bene" i genetici, piuttosto che programmare in java.

    ragionieri programmatori in java li trovi dietro ogni angolo, e vengono tipicamente assunti a livello di operai.

    uno che ti sappia ottimizzare il taglio di una materia prima per minimizzare gli scarti, in tempo reale, tipicamente guadagna 10 (o anche 100 volte) il programmatore java.

    così, tanto per dare un'idea di cosa è importante nel mondo del lavoro

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469

    Re: Re: Re: Re: un padre genera 3 figli

    Originariamente inviato da YuYevon
    (...)Vorrei spezzare una lancia a favore della sempre più umiliata università italiana(...)E stiamo parlando di un'università del Nord, tra le più blasonate e... finanziate.
    Io invece ti segnalo che TUTTE le università italiane sono pessime, nord, sud, est ed ovest.
    A livello mondiale sono considerate pochissimo (e giustamente, aggiungo io).
    La "rivoluzione" 3+2 ha distrutto quella che era una (buona, non eccezionale) università trasformandola in una pessima imitazione di un buon ex-liceo.

    Non fatevi quindi particolari illusioni: studiate pure nell'università X,Y o Z (italiana): avrete una pessima preparazione al nord, centro e sud

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.