elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Solucionado]Crear dos procesos duplicados a partir del padre usando fork() ?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Solucionado]Crear dos procesos duplicados a partir del padre usando fork() ?  (Leído 5,860 veces)
16BITBoy

Desconectado Desconectado

Mensajes: 137


En mi pompa..


Ver Perfil WWW
[Solucionado]Crear dos procesos duplicados a partir del padre usando fork() ?
« en: 17 Junio 2010, 22:31 pm »

Buenas.

Pues ando trasteando con los procesos en C con linux, y jugando con el fork.
Vereis, intento crear de un proceso padre, dos procesos iguales a este, diciéndome el padre los pid de esos dos procesos, de modo que esperaría algo como:
Código:
$ ./programa
Proceso padre trabajando
Los pid de los procesos son:
1111, 1112 //Por poner
Proceso hijo trabajando
Proceso hijo trabajando
$
En mi código dos funciones que hacen lo mismo casi, excepto que uno crea dos procesos en vez de crear uno, por motivos de pruebas. El código es el siguiente:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>

#define MAX_HIJOS 2

void uno()
{
pid_t hijo;
int i;
hijo = fork();

if(hijo != 0)
printf("Proceso padre trabajando\n\n");
else
{
printf("Proceso hijo trabajando\n");
}
}

void mostrar_pids(int *pids)
{
int i;
printf("Los pid de los procesos son:\n");
for(i = 0; i<MAX_HIJOS; i++)
{
printf("%d, ", pids[i]);
}

}

void varios()
{
pid_t hijos[MAX_HIJOS];
int i;
for(i=0; i<MAX_HIJOS; i++)
{
hijos[i] = fork();
if(hijos[i] == 0)
break; /*No llamamos mas a fork si sabemos es hijo*/
}
if(hijos[0] != 0)/*Aqui un proceso hijo entra... y no deberia..*/
{
printf("\nProceso padre trabajando\n\n");
mostrar_pids(hijos);
}
else
{
printf("\nProceso hijo trabajando\n");
}
}

int main()
{
varios();
exit(0);
}
Lo de "*Aquí un proceso hijo entra... y no deberia..*/" es algo que apunté por que pensé eso, no lo se en verdad. Bueno el problema es que lo que obtengo es esto:
Código:
$ ./main

Proceso padre trabajando


Los pid de los procesos son:
Proceso padre trabajando
Proceso hijo trabajando

Los pid de los procesos son:
5726, 5727, 5726, 0,
Como veis, uno de los procesos hijo tiene un pid, y no debería. Además ¡otro se identifica como padre!. Según el libro que leo, fork() devuelve 0 si es un hijo el que lo llama. Entonces me llama la duda de si esta permitido crear dos procesos, pues en el libro que tengo no dice nada relacionado con esto. Y si no es este el problema, ¿por donde van los tiros?

Gracias de antemano ;)

Lh: No hagas doble post :D

Vaya tela me maree yo solo. Hoy abro el código y el libro que seguía y se me pasaron dos cosas. Fork hace una copia del proceso, "tal y como está". Pero se me paso pensar que sigue por donde seguía el padre en el momento del fork. Y otra... no he podido estar mas ciego al ver que he puesto un cero en lugar de la variable i, en el if que comprueba lo devuelto por fork; por esta razón uno se identificaba como padre, por que lee el pid que obtuvo el padre.

En fin, tema resuelto ^^


« Última modificación: 18 Junio 2010, 20:22 pm por 16BITBoy » En línea

Blog personal: http://www.16bitboy.com/blog

- Que horrible pesadilla, unos y ceros por todas partes... hasta me parecio ver un ¡dos!
- Bender, solo fue una pesadilla, no existe eso que llamas "dos".
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Batch] Crear varios txt a partir de otro txt [Solucionado]
Scripting
bjeli1980 8 13,843 Último mensaje 20 Septiembre 2012, 05:45 am
por Eleкtro
Crear tabla usando como nombre el campo de otra MYSQL [Solucionado]
Bases de Datos
Graphixx 1 3,691 Último mensaje 1 Diciembre 2010, 06:48 am
por Graphixx
Crear fork de XFCE
GNU/Linux
RakNae 3 2,084 Último mensaje 27 Noviembre 2012, 19:04 pm
por portaro
Procesos duplicados, ¿virus?
Seguridad
Izaya 2 6,068 Último mensaje 21 Abril 2016, 10:09 am
por adastra
Procesos con fork
Programación C/C++
prof neurus 2 1,464 Último mensaje 27 Mayo 2020, 01:59 am
por prof neurus
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines