|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Dec 2004
Città: Treviso e Udine
Messaggi: 258
|
fork() per creare N processi...
Ok l'ultima volta ho preteso troppo ma stavolta vi chiedo un aiuto relativamente semplice. Non mi e'chiaro il funzionamento della fork(), guardate il seguente codice:
Codice:
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/wait.h> #define N 2 main() { pid_t pid; int i; for (i=0; i<N; i++) { printf("Processo %i forka\n",getpid()); pid=fork(); } if(pid == 0) printf("Sono il processo figlio (PID: %d).\n",(int)getpid()); else if(pid>0) printf("Sono %i, il genitore del processo con PID %d.\n",getpid(), pid); else printf("Si e' verificato un errore nella chiamata a fork.\n"); } |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Perché ogni child riceve una "copia" del ciclo for, e continua esso stesso a forkarsi indipendentemente dal parent. Alla fine dovresti ritrovarti con 2^N processi!
Soluzione: Codice:
for (i=0; i<N; i++) { printf("Processo %i forka\n",getpid()); pid=fork(); if (!pid) break; }
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Dec 2004
Città: Treviso e Udine
Messaggi: 258
|
Mio salvatore!!!
![]() Questo pomeriggio provo... |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Sep 2000
Messaggi: 139
|
il figlio che viene generato dalla fork è esattamente uguale al padre ed esegue come prima istruzione quella successiva alla fork. siccome tu eri dentro un ciclo for l'istruzione successiva alla fork era l'incremento di i, quindi il test e poi l'esecuzione del corpo del for. questi cavolo di errori mi hanno fatto bestemmiare non poco anche a me...
![]()
__________________
Sopra la panca la capra campa, sotto la panca la capra crepa. ![]() |
![]() |
![]() |
![]() |
#5 | |
Member
Iscritto dal: Dec 2004
Città: Treviso e Udine
Messaggi: 258
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:39.