Professional Documents
Culture Documents
SISTEMAS DE OPERACIONES I
GUIA DE LABORATORIO
ecp 1 de 6
1) OBJETIVO DE LA PRACTICA
a) Capacitar al alumno en el funcionamiento y creacin de procesos en Linux.
2) TRABAJO PREPARATORIO.
a) Comprender el concepto de procesos.
b) Conocer el proceso de programacin en C para Linux.
3) MARCO TEORICO
Identificacin de procesos
POSIX identifica cada proceso por medio de un entero nico llamado identificador de
proceso de tipo pid_t. Los servicios de identificacin de procesos son:
pid_t getpid(void);
pid_t getppid(void);
El entorno de un proceso
El entorno de un proceso viene definido por una lista de variables que se pasan al mismo en
el momento de comenzar su ejecucin. Estas variables se denominan variables de entorno, y
son accesibles a un proceso a travs de la variable externa environ, declarada de la siguiente
manera:
Gestin de procesos
pid_t fork();
Ejecutar un programa
El servicio exec tiene por objeto cambiar el programa que esta ejecutando un proceso. En
POSIX existe una familia de funciones exec, cuyos prototipos se muestran a continuacin:
return (valor);
El proceso padre se queda bloqueado hasta que termina un proceso hijo. Existen dos
formas de invocar este servicio:
4) TRABAJO DE LABORATORIO.
Solucin
/*
Nombre : idProcesos
Objetivo : muestra el pid de procesos padre e hijo
Autor :
FCreacion :
FModificacion :
*/
#include <sys/types.h>
#include <stdio.h>
main()
{
pid_t id_proceso;
pid_t id_padre;
id_proceso = getpid();
id_padre = getppid();
Solucin
/*
Nombre : infoProc
Objetivo : muestra informacion de identificacin de un
proceso
Autor :
FCreacion :
FModificacion :
*/
#include <sys/types.h>
#include <stdio.h>
main()
{
printf("Identificador de usuario : %d\n", getuid());
printf("Identificador de usuario efectivo : %d\n", geteuid());
printf("Identificador del grupo : %d\n", getgid());
printf("Identificador de grupo efectivo : %d\n", geteuid());
}
UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO
SISTEMAS DE OPERACIONES I
GUIA DE LABORATORIO
ecp 4 de 6
Solucin
/*
Nombre : printHome
Objetivo : imprime el valor de la variable de entorno HOME
Autor :
FCreacion :
FModificacion :
*/
#include <stdio.h>
#include <stdlib.h>
main()
{
char *home = NULL;
home = getenv("HOME");
if (home == NULL)
printf("HOME no se encuentra definida\n");
else
printf("El valor de HOME es %s\n", home);
}
Solucin
/*
Nombre : entornoProc
Objetivo : imprime informacion del entorno de un proceso
Autor :
FCreacion :
FModificacion :
*/
#include <stdio.h>
int main()
{
char** var;
}
UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO
SISTEMAS DE OPERACIONES I
GUIA DE LABORATORIO
ecp 5 de 6
e) Escriba un programa que cree un proceso hijo. Cada proceso debe mostrar su
identificador
Solucin
/*
Nombre : creaProcesoHijo
Objetivo : crea un proceso hijo y muestra su ID
Autor :
FCreacion :
FModificacion :
*/
#include <stdio.h>
#include <sys/types.h>
main()
{
pid_t pid;
pid = fork();
if (pid == 0)
{
//Codigo del proceso hijo
printf("Soy el proceso Hijo. Mi PID es %d\n", getpid());
}
else
{
//Codigo del proceso padre
printf("Soy el proceso Padre. Mi PID es %d\n",getpid());
}
}
Solucin
/*
Nombre : creaNHijos
Objetivo : crea N hijos para un proceso
Autor :
FCreacion :
FModificacion :
*/
#include <stdio.h>
#include <sys/types.h>
main()
{
pid_t pid;
int i;
int n=5;
if (pid == 0)
break;
}
5) PRACTICAS DE LABORATORIO
a) Escriba un programa que cree una jerarqua de procesos (con una relacin padre hijo tal
que P0 -> P1 -> P2 -> )
b) Escriba un programa que cree un proceso hijo que calcule el cuadrado de un numero
ingresado por el usuario. El proceso padre debe calcular el cubo de dicho nmero.
c) Escriba un programa que cree un hijo, espere su terminacin y muestre la informacin de
estado de terminacin del mismo.
d) Escriba un programa que cree un proceso hijo que determine la raz cuadrada de un
numero ingresado por el usuario. El proceso padre debe mostrar el resultado calculado.