Buongiorno!
Sto iniziando ad affrontare i grafi di precedenza e vorrei far si che un processo, P1, venga portato a termine solo dopo aver terminato altri due processi, P2 e P3. Penso che il grafo di precedenza sia il seguente:

 P2     P3
  \    /
     P1

E a livello di codice, partendo dal processo P1, io scriverei qualcosa del genere (partendo dal fatto che è sbagliato..) :

pid_t pid1, pid2;
pid1 = fork(); 
if(pid1 != 0) { // sono nel padre P1
    pid2 = fork();
    if(pid2 != 0) { // sono ancora nel padre P1!
         waitpid(pid1, (int*)0, ***); // che parametro se non voglio opzioni?
         waitpid(pid2, (int*)0, ***);
         fprintf(stdout,"P1\n");
    else { // P3
         fprintf(stdout, "P3\n");
         exit(0);
    }
}
else { // P2
       fprintf(stdout, "P2\n");
       exit(0);
}
return 0;

dove dal padre P1 aspetto che vengano terminati i processi nell'ordine P2, P3 per poi stampare P1. Come posso fare per risolvere? Grazie!

chiesto 25 Lug '15, 11:12

Strcmp_01's gravatar image

Strcmp_01
451711


Il codice mi sembra corretto, devi solo sistemare la parentesi graffa nel secondo if (hai dimenticato di chiuderla prima dell'else) e inserire 0 nella waitpid in assenza di opzioni (potevi anche usare una semplice wait due volte).

P.S. Sei nel corso al Poli con Quer, vero?

coll. permanente

ha risposto 25 Lug '15, 12:48

dslul's gravatar image

dslul
9631416

Si la parentesi me la sono dimenticata scrivendo qua, grazie! Non sapevo del parametro. Comunque si sono con Quer, come hai fatto a capirlo? :)

(25 Lug '15, 12:53) Strcmp_01 Strcmp_01's gravatar image

Ho fatto anche io il suo corso, gli esercizi sono uguali :)

(25 Lug '15, 13:22) dslul dslul's gravatar image
La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×13

domanda posta: 25 Lug '15, 11:12

domanda visualizzata: 711 volte

ultimo aggiornamento: 25 Lug '15, 13:22

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.