PRACTICA N° 2 ÁRBOL DE PROCESOS UTILIZANDO COMANDO FORK()

Páginas: 5 (1191 palabras) Publicado: 20 de noviembre de 2014
INSTITUTO POLITÉCNICO NACIONAL
UNIDAD PROFESIONAL INTERDISCIPLINARIA EN INGENIERÍA Y TECNOLOGÍA AVANZADA



PRACTICA N° 2


ÁRBOL DE PROCESOS UTILIZANDO COMANDO FORK()

PROGRAMACIÓN AVANZADA






Objetivo
Lograr hacer un árbol de procesos utilizando el comando fork. De tal forma que se muestre un orden especifico. El orden es el siguiente
1,3,2,5,4,6,7,8,9
De tal manera queel árbol de procesos sea el siguiente.
1
/ | \
2 3 4
/ \ |
5 6 7
/
8
/
9

Desarrollo

Paso 1:
Abrimos el Gedit para escribir nuestro código en c



Paso 2:
Escribimos el siguiente código:
#include
#include

void proceso(int);
int main(){
int pid1,pid2,pid3,pid4;
pid1=fork();
//si proceso 1 es padre,ejecuta lo siguiente
if(pid1){
//entra proceso padre
printf("1\n");

//crea proceso 3
printf("3\n");
pid2=fork();
//proceso 3 crea proceso 5 pero proceso 1 crea proceso 4
printf("4-5\n");
pid3=fork();

//si proceso 3 es hijo
if(!pid2){
//proceso 3 como es hijo crea proceso 6
printf("6-8 -%d- %d\n",getpid(),pid3);
pid4=fork();

if(!pid4&&!pid3){printf("9 -%d-%d\n",getpid(),pid4);
fork();}
}
//si proceso 4 crea proceso 7 siempre y cuando proceso 1 sea padre
else if(!pid3&&pid2){//usleep(100);
//se crea proceso 7
printf("7\n");
fork();
}
proceso(pid1);
}
else{
//entra proceso hijo (2)
printf("2\n");
proceso(pid1);
}
sleep(3);
return 0;
}

void proceso(int pid){
printf("mi padre es: %d--- yosoy: %d\n",getppid(),getpid());
}

Como se puede ver en el código se incluyen las librerías, se declara una función llamada proceso que será de tipo void y recibirá un parámetro entero void proceso(int pid); esta función lo que hace es imprimir el proceso y el padre del proceso.

Declaramos 4 variables de tipo entero que nos van a servir de referencia para saber con que proceso estamostratando

Consecutivamente a pid1 la igualamos con el primer fork(), este fork lo que hace es crear hasta esa línea de código una copia exacta, y consecutivamente ponemos un if y un else, lo que hace aquí el programa es identificar cuando se trata del proceso padre y del proceso hijo, si pid1=0 se trata del hijo y si pid1>0 se trata del proceso padre.

Como habíamos dicho que el if(pid1) nosidentifica si se trata del proceso padre, entonces después del “if” se pondrán dos fork’s para que el padre haga otros dos hijos y así ya se tendrá que el proceso padre tiene los hijos 2,3,4, pero antes de ello cada fork lo igualamos a una variable, el primero se iguala a pid2 y el segundo a pid3, esto para saber en cual estamos.

Consecutivamente al terminar el proceso 1 o el proceso padre, se puedever que el primer fork() que se iguala a pid2 se comenzara a ejecutar a partir de esa misma línea de código en donde esta, y por consecuente ejecutara al fork de abajo creando así mismo un hijo que será el proceso 5 ya que el proceso 4 fue creado por el proceso 1, entonces este 3er hijo se ejecutara junto con el proceso 5 pero también con el proceso 4, es decir se están corriendo 3 procesos almismo tiempo. Después abajo tenemos un segundo if, y lo ponemos como if(¡pid2), este if lo que hace es preguntar si el 3er hijo es hijo, retornara un 0, que es equivalente a la negación de pid2, es decir, si no es padre, entonces el 3er hijo entra al if y ejecuta en seguida un fork el cual lo igualaremos a un pid4, aquí lo que hace es crear un 6to proceso pero derivado del proceso 3, el pid nosservirá de referencia para ver de que proceso se trata, después inmediatamente termina el proceso 3 de ejecutarse

Por otro lado tenemos el proceso 4 que entrara al else if(!pid3&&pid2), y creando asi el proceso 7 pero esto ocurre siempre y cuando el proceso 4 sea un hijo y el proceso 3 sea un padre, sin embargo por otro camino esta el proceso 5 que se esta ejecutando tambien el cual va a entrar...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • práctica 2 procesos industriales
  • PsicologiaTrabajo practico N° 2
  • Trabajo Practico N 2
  • PRÁCTICA N 2
  • Practica N 2
  • Proceso De Investigaci N 2
  • TRABAJO PRACTICO N 2
  • practico n#2

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS