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

    [c++] creare un programma che generi i processi

    Devo realizzare per l'università questo programma:

    Write a program in C which uses the fork instruction to create
    a father process, one child processes, and two grandchild processes,
    each containing an
    infinite loop. The program should print out the PID's of all processes
    created.
    One of the granchildren processes should, after sleeping, kill the child
    process.
    What processes remain?

    Il problema è che non ho la più pallida di come fare, non tanto per la logica, quanto per il fatto che non conosco la sintassi per la creazione e la distruzione di processi. So che esistono i comandi fork e kill, ma come si usano? Che parametri hanno?
    Insomma, non vorrei che qualcun'altro mi faccia il programma perchè voglio capire come si fa, però gradirei una mano per capire come si debba fare... grazie!
    Matteo "QMatteo" Pagani

  2. #2
    Ho trovato questo programma, ma sinceramente faccio fatica a capirne il funzionamento:

    codice:
    * program fork.c -----------------*/
    #include <stdio.h>
    #include <unistd.h>
    #include <signal.h>
    
    
    main(){
    int p=0;
    int n=5;
    int m=5;
    
    
    printf("parent=%d\n",getpid()); 
    
    
    p=fork();
    if (p!=0){
    /* parent code */
    printf("child=%d\n",p);
    while(n>0){
    n=n-1;
    printf("parent speaking\n");
    sleep(3);}
    while(1){
    ;}
    }
    else{
    
    /* child code */
    while(m>0){
    m=m-1;
    printf("child speaking \n");
    sleep(1);}
    while(1){
    ;}
    }
    
    }
    
    /*
    getpid returns the pid of the calling process
    fork() returns in the parent the pid of the child,
    in the child returns 0.
    */
    Ad esempio, la funzione sleep cosa serve? E cosa fa di preciso questo programma? Non capisco perchè inizializzi quelle due variabili a 5... A dire la verità non ho proprio capito lo scopo...
    Matteo "QMatteo" Pagani

  3. #3
    Utente di HTML.it L'avatar di tato83
    Registrato dal
    Nov 2001
    Messaggi
    51
    in c la funzione sleep permette di inserire un pausa e prende come argomento quanto tempo deve stare in pausa prima di riprendere l'esecuzione.....

  4. #4
    Utente di HTML.it L'avatar di tato83
    Registrato dal
    Nov 2001
    Messaggi
    51
    se mi dai la tua email ti invio un documento che spero possa farti copire meglio come funziona la fork() e come si utilizza....

    Ciao

    Antonello

  5. #5
    Ok, grazie mille per ora... La mia mail è qmatteoq@email.it... Ho provato a fare un po' di esperimenti e sto incominciando a capirci qualcosa: ho fatto questo programmino...

    codice:
    #include <stdio.h>
    #include <unistd.h>
    #include <signal.h>
    
    main() {
    	int pid=0;
    
    printf("Il PID del processo padre è %d\n",getpid());
    pid=fork();
    if (pid==0) {
    pid=fork();
    if (pid==0) printf("Sono il secondo figlio e il mio PID è %d!\n",getpid());
    printf ("Sono il processo figlio e il mio PID è %d!\n",getpid());
    }
    if (pid!=0) {
    printf ("Sono il processo padre e il mio PID è %d!\n",getpid());
    }
    }
    Come output ottengo:
    codice:
    Il PID del processo padre è 17452
    Sono il secondo figlio e il mio PID è 17454!
    Sono il processo figlio e il mio PID è 17454!
    Sono il processo figlio e il mio PID è 17453!
    Sono il processo padre e il mio PID è 17453!
    Sono il processo padre e il mio PID è 17452!
    Lo scopo di questo programma (almeno, nelle mie intenzioni) è quello di avere un padre che generi due figli... Non capisco però perchè le frasi vengono stampate due volte, con il PID non coincidente tra l'altro... (se mancassero la terza e la quarta riga sarebbe perfetto )
    Matteo "QMatteo" Pagani

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.