En la siguiente practica se identifico que...
getpid. Devuelve el identificador de proceso del proceso actual. Esto es usando normalmente por rutinas que generan nombres únicos de ficheros temporales.
getpid. Devuelve el identificador de proceso del proceso actual. Esto es usando normalmente por rutinas que generan nombres únicos de ficheros temporales.
getppid. Devuelve el identificador de proceso del padre del proceso actual.
PID. Process IDentification. Numero que identifica un proceso en el sistema, este numero es unico para cada proceso.
El fork() hace que el proceso actual se duplique
PID. Process IDentification. Numero que identifica un proceso en el sistema, este numero es unico para cada proceso.
El fork() hace que el proceso actual se duplique
A continuacion se muestra el codigo de la practica con algunos comentarios sobre lo que hace cada linea...
#include<sys/types.h>//Libreria que contiene funciones de busqueda y ordenamiento de directorios y manipulacion de archivos
#include<sys/wait.h>//Libreria se definen las siguientes constantes simbólicas para su uso con waitpid () :
#include<unistd.h>//Libreria que contiene funciones para el manejo de directorios y archivos.
#include<stdio.h> //Libreria que contiene funciones de cabeceras de entrada y salida
#include<stdlib.h> //Libreria que contiene los prototipos de funciones de C para gestión de memoria dinámica, control de procesos y otras
int main (int argc, char * argv [])
{
int num;//declaracion de una variable de tipo entero ; por lo tanto es un entero para usarlo como contador del for
pid_t pid;// un entero capaz de contener un pid ; definimos un tipo de dato para contener un pid
for(num=0;num<3;num ++) // Ciclo el cual indica 3 iteraciones
{ //inicia el ciclo
pid=fork();// llamamos a la función fork, la cual devolverá cero al programa ejecutado en el proceso hijo y el pid del proceso hijo al padre
printf("soy el proceso PID %d,y mi padre tiene %d de PID \n",getpid(),getppid());//Manda un mensaje en pantalla en donde se muestra lo escrito y lo que contiene getpid y getppid
if(pid!=0) break;//sirve también para terminar loops producidos por FOR antes que se cumpla la condición normal de terminación
srandom(getpid());
sleep(random()%3);//Insertando un retraso aleatorio antes de cada llamada a printf, por lo que el efecto visual de la multitarea: lo hacemos con las funciones sleep y random.
} //fin del ciclo
if(pid!=0) printf("fin del proceso de PID %d\n",wait(NULL));//Manda un mensaje en pantalla y con el wait(NULL) espera que finalice cualquier proceso
return 0;
}
Preguntas
1.¿Por que aparecen mensajes repetidos?
Aparecen 6 mensajes con la frase "soy el proceso PID # ,y mi padre tiene # de PID" y es por que esta frase esta dentro de un ciclo de 3 iteraciones pero como dentro de ese ciclo tambien esta un fork () las iteraciones se duplican. y en los numeros # son identificadores de los procesos hijo y padre.
2. ¿Que observas?
Que se muestra varias veces el mensaje para ser exactos 6 veces y en esas 6 veces los numeros de los procesos cambian o a veces son los mismos numeros. Y despues te muestra que los procesos han terminado. Tambien se muestra que en la primera iteracio se muestra el mensaje "soy el proceso PID (con Cierto numero de proceso),y mi padre tiene (pero en esta parte en las 3 corridas del programa salio el siguiente numero 1697) de PID"
3.¿Porqué?
En el codigo se muestra que solo se tiene que mostrar 3 iteraciones pero como dentro del codigo se se manda a llamr un fork las iteraciones se duplican por lo tanto ahora son 6 iteraciones y en los numeros de los procesos son la identificacion de cada proceso y varia dependiendo del proceso. por ejemplo en la pantalla se muestra que se ha corrido el proceso 1766, 1767, 1768 y 1769 pero los que se terminan son solo los ultimos 3 procesos que son los 1767, 1768 y 1769. Y el numero que aparece en la primera itraracion (1697) podria ser por que es en donde se inicializa el proceso.
Aparecen 6 mensajes con la frase "soy el proceso PID # ,y mi padre tiene # de PID" y es por que esta frase esta dentro de un ciclo de 3 iteraciones pero como dentro de ese ciclo tambien esta un fork () las iteraciones se duplican. y en los numeros # son identificadores de los procesos hijo y padre.
2. ¿Que observas?
Que se muestra varias veces el mensaje para ser exactos 6 veces y en esas 6 veces los numeros de los procesos cambian o a veces son los mismos numeros. Y despues te muestra que los procesos han terminado. Tambien se muestra que en la primera iteracio se muestra el mensaje "soy el proceso PID (con Cierto numero de proceso),y mi padre tiene (pero en esta parte en las 3 corridas del programa salio el siguiente numero 1697) de PID"
3.¿Porqué?
En el codigo se muestra que solo se tiene que mostrar 3 iteraciones pero como dentro del codigo se se manda a llamr un fork las iteraciones se duplican por lo tanto ahora son 6 iteraciones y en los numeros de los procesos son la identificacion de cada proceso y varia dependiendo del proceso. por ejemplo en la pantalla se muestra que se ha corrido el proceso 1766, 1767, 1768 y 1769 pero los que se terminan son solo los ultimos 3 procesos que son los 1767, 1768 y 1769. Y el numero que aparece en la primera itraracion (1697) podria ser por que es en donde se inicializa el proceso.
Resultado del programa la primera imagen muestra la ejecucion de una sola vez del programa y la segunda muestra que se ejecutaron en dos ocaciones el programa.
REVISADO
ResponderEliminar