/lab-procesos

Laboratorio de procesos realizado por @deiry y @estefa942

Primary LanguageCGNU General Public License v3.0GPL-3.0

PRÁCTICA 1 - PROCESOS

1. Objetivos

  1. Familiarizarse con las diferentes estructuras y funciones relacionadas con el manejo de procesos en linux.
  2. Codificar programas que hagan uso del API de procesos.

2. Actividades en el laboratorio

Realizar los siguientes ejercicios:

  1. Escriba un programa que llame un fork(). Antes del llamado del fork(), declare una variable de acceso (por ejemplo, x) y asígnele un valor (por ejemplo, 100). Responda las siguientes preguntas:
  • ¿Cuál es el valor de la variable en el proceso hijo?
  • ¿Qué sucede con la variable cuando el proceso hijo y el padre cambian el valor de x?
  1. Escriba un programa que abra un archivo (con la llamada open()) y entonces llame a fork(). Nota: El siguiente enlace puede ser de utilidad para entender la llamada open().
  • ¿Pueden el padre y el hijo acceder al file descriptor retornado por open()?
  • ¿Qué pasa si ellos empiezan a escribir el archivo de manera concurrente, es decir, a la misma vez?
  1. Escriba un programa usando fork(). El proceso hijo imprimirá "Hello"; el proceso padre imprimirá "goodbye". Usted deberá asegurar que el proceso hijo imprima en primer lugar; ¿usted podría hacer esto sin llamar wait() en el padre?
  2. Escriba un programa que llame fork() y entonces llame alguna forma de exec() para correr el programa /bin/ls. Intente probar todas las variaciones de la familia de funciones exec() incluyendo (en linux) execl(), execle(), execlp(), execv(), execvp() y execvpe(). ¿Por qué piensa usted que existen tantas variaciones para la misma llamada básica?
  3. Escriba ahora un programa que use wait() para esperar que el proceso hijo finalice su ejecución. ¿Cuál es el valor de retorno de la función wait()?, ¿Qué pasa si usted usa la función wait en el hijo?
  4. Haga un programa, como el del ejercicio anterior, con una breve modificación, la cual consiste en usar waitpid() en lugar de wait(). ¿Cuándo podría ser waitpid() útil?
  5. Escriba un programa que cree un proceso hijo y entonces en el proceso hijo cierre la salida estandar (STDOUT FILENO). ¿Qué pasa si el hijo llama printf() para imprimir alguna salida después de cerrar el descriptor?
  6. Escriba un programa que cree dos hijos y conecte la salida estándar de un hijo a la entrada estándar del otro usando la llamada a sistema pipe()

3. Entregable

Los entregables para esta practica incluiran:

  1. Codigo de los ejercicos propuestos.
  2. Solución a las preguntas planteadas. apoyar la explicación con graficas donde lo vea necesario.