Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Belial & Grimoire en 28 Septiembre 2010, 04:22 am



Título: hacer esto con fork esta bien?
Publicado por: Belial & Grimoire en 28 Septiembre 2010, 04:22 am
hola

tengo una duda con fork

para usarlo tengo que hacerlo siempre asi?

Código
  1. if ( (pid1=fork()) == 0 )
  2. {
  3. printf("hijo (%d, hijo de %d)\n",  getpid(), getppid());
  4. }
  5.  
  6. waitpid(pid1, &status1, 0);

y si lo tengo que usar siempre así... esta bien que haga esto?

Código
  1. #include <sys/types.h>
  2. #include <sys/wait.h>
  3. #include <unistd.h>
  4. #include <stdio.h>
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8. pid_t pid1;
  9. int status1;
  10.  
  11. if ( (pid1=fork()) == 0 )
  12. {
  13. printf("hijo (%d, hijo de %d)\n",  getpid(), getppid());
  14. }
  15.  
  16. waitpid(pid1, &status1, 0);
  17. printf("hola\n");
  18.  
  19. return 0;
  20. }
  21.  

lo pregunto porque cuando lo ejecuto, me sale la frase "hola" dos veces...a menos de que ponga la frase "hola" en un else.. de esa manera me aparece 1 sola vez

me pueden explicar un poco sobre esto por favor

salu2


Título: Re: hacer esto con fork esta bien?
Publicado por: [L]ord [R]NA en 28 Septiembre 2010, 05:16 am
El caso es que vez dos hola porque el fork() hace una copia identica del proceso que tambien se esta ejecutando... por lo tanto al ser 2 procesos que se ejecutan desde el punto donde se invoca el fork() cada uno ejecutara printf("hola\n");


Título: Re: hacer esto con fork esta bien?
Publicado por: Belial & Grimoire en 28 Septiembre 2010, 06:17 am
aa.. ok

pero entonces tengo que poner siempre un if(( pid= fork()) para usar todos los forks que vaya a necesitar? y en else poner todo el codigo que vaya a usar para que no ejecutar 2 veces todo el codigo?

salu2


Título: Re: hacer esto con fork esta bien?
Publicado por: [L]ord [R]NA en 28 Septiembre 2010, 06:42 am
me supongo que seria mas apto utilizar if anidados dentro de los else, pero no he necesitado mas de 2 procesos a la vez trabajando, pero hice la prueba y si, asi podrias hacerlo... aunque  no le encuentro mucha funcionalidad a mas de 2 procesos.


Título: Re: hacer esto con fork esta bien?
Publicado por: Belial & Grimoire en 28 Septiembre 2010, 07:05 am
entonces si llegara a usar otro proceso al mismo tiempo seria bueno ponerlo dentro de else verdad?

bueno, gracias por la ayuda


Título: Re: hacer esto con fork esta bien?
Publicado por: [L]ord [R]NA en 28 Septiembre 2010, 16:26 pm
Lo que quieres que haga el proceso padre podrias colocarlo en el else. Asi podrias crear un tercer proceso... pero para todo esto se necesita una buena planificacion, debido a que no se puede saber bien que proceso usara mas el procesador y cuando un proceso tendra disponibles los datos que necesita el otro.