https://github.com/rorro6787/linux_shell
https://github.com/rorro6787/linux_shell
Last synced: 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/rorro6787/linux_shell
- Owner: rorro6787
- Created: 2024-06-16T09:04:12.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2024-06-16T09:22:37.000Z (12 months ago)
- Last Synced: 2025-02-13T06:44:01.562Z (4 months ago)
- Language: C
- Size: 55.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Linux_Shell
Este proyecto desarrolla un intérprete de comandos o Shell de aspecto similar al ya existente en Linux, que permite al usuario lanzar sus programas y ejecutar comandos de manera personalizada. Se proporciona una versión inicial implementada en lenguaje C, ProyectoShell.c, que se apoya en funciones de otro fichero auxiliar, ApoyoTareas.c (junto a su cabecera, ApoyoTareas.h).
## Uso
1. Para compilar:
```bash
gcc ProyectoShell.c ApoyoTareas.c-o MiShell
2. Para ejecutar:
```bash
./MiShell
3. Para salir pulsar `Control+D`## Funcionalidad Básica
El Shell soporta la ejecución de comandos de manera similar a los shells tradicionales de Linux. Las funcionalidades principales incluyen:1. **Ejecución de Comandos**: Los usuarios pueden introducir comandos que el Shell ejecutará. Los comandos pueden ejecutarse en primer plano (foreground) o en segundo plano (background).
- **Comandos en Primer Plano**: Se muestra el PID del proceso, el nombre del comando y su estado final.
- **Comandos en Segundo Plano**: Se muestra únicamente el PID del proceso y el nombre del comando.2. **Manejo de Errores**: Si se introduce un comando incorrecto, el Shell mostrará un mensaje de error.
## Comandos Internos
Además de los comandos externos, el Shell soporta varios comandos internos:
1. **cd**: Cambia el directorio de trabajo actual.
2. **logout**: Sale del Shell.## Gestión de Procesos
El Shell gestiona los procesos de manera eficiente mediante las siguientes funciones del sistema:
1. **fork()**: Crea un proceso hijo.
2. **waitpid()**: Espera a que termine un proceso hijo.
3. **execvp()**: Lanza un programa.
4. **exit()**: Termina un proceso.## Ejecución de Comandos en Primer y Segundo Plano
- **Primer Plano (FG)**: El comando ejecutado en primer plano toma el control del terminal.
- **Segundo Plano (BG)**: El comando ejecutado en segundo plano no toma el control del terminal, permitiendo a el Shell seguir aceptando nuevos comandos.## Manejo de Señales
El Shell maneja las señales para evitar procesos zombies y controlar la suspensión y reanudación de procesos:
- **SIGCHLD**: Maneja la terminación o suspensión de procesos en segundo plano.
- **SIGINT, SIGQUIT, SIGTSTP, SIGTTIN, SIGTTOU**: Controla estas señales para gestionar el terminal.## Comandos Adicionales
1. **jobs**: Imprime una lista de comandos que están siendo ejecutados en segundo plano o que han sido suspendidos.
2. **fg**: Permite pasar a primer plano un comando que estaba en segundo plano o suspendido.
3. **bg**: Permite pasar a segundo plano un comando que estaba suspendido.## Diagram de flujo del Shell
La siguiente imagen representa un diagrama de flujo que describe los distintos procesos que maneja el shell:
![]()