Está en la página 1de 4

UPIITA Práctica 1

Programación Avanzada
Prof. Miguel Alejandro Martı́nez Rosales Malagón Hernández Edgar H.
Grupo: 2TM2 Fecha de Entrega: 17/02/17

Práctica 1: Creación de un árbol de procesos en Linux, mediante


la función fork() y el lenguaje C

Cuando se llama la función fork, esta genera un duplicado del proceso


actual. El duplicado comparte los valores actuales de todas las variables,
ficheros y otras estructuras de datos. La llamada a fork retorna al proceso
padre el identificador del proceso hijo y retorna un cero al proceso hijo.
Con base en la información anterior, realizar un programa en C que
genere un árbol de procesos similar a la siguiente estructura:

1 2 3

7 8
4 5 10

6 9
11

Figura 1: Diagrama del árbol de procesos deseado.


Salida en ejecución
Una vez compilado y ejecutado el código, obtenemos la siguiente salida
en consola:

Figura 2: Resultado de la ejecución de la práctica 1.

De la figura anterior, podemos identificar dos columnas con los procesos


creados. La primera muestra el ID del proceso padre actual; y la segunda,
el ID del proceso generado. Con dicha información, podemos recrear el
árbol, respetando la jerarquı́a de cada proceso. La representación gráfica
del árbol que se genera se muestra en la figura 3.

1719

1720 1721 1722

1724 1725
1726 1727 1723

1730 1729
1728

Figura 3: Diagrama del árbol de procesos obtenido.

2
Anexos
1 #i n c l u d e <s t d i o . h>
#i n c l u d e <u n i s t d . h>
3
// Funcion que imprime PID y PPID a c t u a l e s .
5 v o i d printPIDS ( ) {
p r i n t f ( ” \nPPID= %d” , g e t p p i d ( ) ) ;
7 p r i n t f ( ” \tPID= %d\n” , g e t p i d ( ) ) ;
};
9
i n t main ( ) {
11 // Cabecera y PIDs p r i n c i p a l e s como r e f e r e n c i a
// para c r e a r e l a r b o l .
13 p r i n t f ( ” Arbol de p r o c e s o s con f o r k ( ) \n” ) ;
p r i n t f ( ”PID de l a c o n s o l a : = %d” , g e t p p i d ( ) ) ;
15 p r i n t f ( ” \nPID d e l programa : = %d\n” , g e t p i d ( ) ) ;

17 i f ( f o r k ( ) ) { // Padre p r e p a r a P−1
i f ( f o r k ( ) ) { // Padre p r e p a r a P−2
19 i f ( f o r k ( ) ) { // Padre p r e p a r a P−3
}
21 else { // Nace P−3
printPIDS ( ) ;
23 i f ( f o r k ( ) ) { // P−3 p r e p a r a P−3−1
}
25 else { // Nace P−3−1
printPIDS ( ) ;
27 i f ( f o r k ( ) ) { // P−3−1 p r e p a r a P−3−1−1
}
29 else { // Nace P−3−1−1
printPIDS ( ) ;
31 }
}
33 }
}
35 else { // Nace P−2
printPIDS ( ) ;
37 i f ( f o r k ( ) ) { // P−2 p r e p a r a P−2−1
i f ( f o r k ( ) ) { // P−2 p r e p a r a P−2−2
39 }
else { // Nace P−2−2
41 printPIDS ( ) ;
}
43 }
else { // Nace P−2−1
45 printPIDS ( ) ;
i f ( f o r k ( ) ) { // P−2−1 p r e p a r a P−2−1−1
47 }
else { // Nace P−2−1−1
49 printPIDS ( ) ;
}
51 }
}
53 }

3
else { // Nace P−1
55 printPIDS ( ) ;
i f ( f o r k ( ) ) { // P−1 p r e p a r a P−1−1
57 i f ( f o r k ( ) ) { // P−1 p r e p a r a P−1−2
}
59 else { // Nace P−1−2
printPIDS ( ) ;
61 }
}
63 else { // Nace P−1−1
printPIDS ( ) ;
65 i f ( f o r k ( ) ) { // P−1−1 p r e p a r a P−1−1−1
}
67 else { // Nace P−1−1−1
printPIDS ( ) ;
69 }
}
71 }
sleep (1) ;
73 return 0;
}

Practica1.c

También podría gustarte