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
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");
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
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.
entonces si llegara a usar otro proceso al mismo tiempo seria bueno ponerlo dentro de else verdad?
bueno, gracias por la ayuda
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.