|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Dec 2006
Messaggi: 314
|
[C] Linux, processi e FORK
Ragazzi dovrei realizzare un ciclo che mi crea vari processi, ai quali in seguito attribuirò un lavoro da compiere ma ho un problema..
Realizzando il tutto con un ciclo me ne crea molti e l'array che dovrebbe contenere i pid viene sovrascritto dai vari processi, questo perchè probabilmente il for viene rieseguito da ogni processo che creo. questo è il codice. Codice:
for(i=0;i<NUM_PROCESSI;i++) { switch(lista[i]=fork()) { case -1: perror("Errore nell'esecuzione della fork."); exit(1); case 0: lista[i]=getpid(); //printf(" lista [%d] = %d",i,lista[i]); break; } } for(i=0;i<NUM_PROCESSI;i++) printf(" lista [%d] = %d",i,lista[i]);
__________________
Athlon64 x2 5600 - AsRock ALiveNF5eSata2+ - kingston 2GB ddr2 800 - GeForce 8800gts 320MB |
![]() |
![]() |
![]() |
#2 | |
Member
Iscritto dal: Jun 2004
Città: Pecetto
Messaggi: 73
|
Se non ricordo male fork ritorna:
-1 in errore 0 per il child > 0 per il parent. Quindi io farei cosi: Quote:
__________________
Gianni |
|
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Jun 2008
Messaggi: 2
|
Codice:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <errno.h> #define NUM_PROCESSI 10 #define NOP ; int main(void) { unsigned int i; pid_t pids[NUM_PROCESSI]; for (i = 0; i < NUM_PROCESSI; i++) { switch (pids[i] = fork()) { case -1: fprintf(stderr, "Errore: %s\n", strerror(errno)); exit(errno); case 0: /* fai qualcosa */ exit(EXIT_SUCCESS); default: /* fai qualcosa di diverso */ NOP } } printf("I pid dei processi creati sono:\n"); for (i = 0; i < NUM_PROCESSI; i++) { printf("%d ", pids[i]); } putchar('\n'); return EXIT_SUCCESS; } |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Dec 2006
Messaggi: 314
|
Grazie ragazzi.. ma funzionano tutti come il mio.. i processi vengono creati, ma se guardo nel monitor di sistema i processi creati sono più del doppio di quelli richiesti
__________________
Athlon64 x2 5600 - AsRock ALiveNF5eSata2+ - kingston 2GB ddr2 800 - GeForce 8800gts 320MB |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:58.