hacer esto con fork esta bien?

Iniciado por Belial & Grimoire, 28 Septiembre 2010, 04:22 AM

0 Miembros y 1 Visitante están viendo este tema.

Belial & Grimoire

hola

tengo una duda con fork

para usarlo tengo que hacerlo siempre asi?

if ( (pid1=fork()) == 0 )
{
printf("hijo (%d, hijo de %d)\n",  getpid(), getppid());
}

waitpid(pid1, &status1, 0);


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

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
pid_t pid1;
int status1;

if ( (pid1=fork()) == 0 )
{
printf("hijo (%d, hijo de %d)\n",  getpid(), getppid());
}

waitpid(pid1, &status1, 0);
printf("hola\n");

return 0;
}


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
.                                 

[L]ord [R]NA

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");

Belial & Grimoire

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
.                                 

[L]ord [R]NA

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.

Belial & Grimoire

entonces si llegara a usar otro proceso al mismo tiempo seria bueno ponerlo dentro de else verdad?

bueno, gracias por la ayuda
.                                 

[L]ord [R]NA

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.