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
$
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);
}
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,
Gracias de antemano
Lh: No hagas doble post
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 ^^