Procesos
Un proceso es una instancia en ejecución de un programa de computadora. Representa una entidad activa que realiza una secuencia de instrucciones, interactúa con el sistema operativo y utiliza recursos del sistema, como memoria, CPU, dispositivos de entrada/salida y archivos.
Un proceso se crea cuando se ejecuta un programa. Puede ser un programa de aplicación que realiza una tarea específica, un programa del sistema que proporciona servicios fundamentales para el funcionamiento del sistema operativo, o incluso un proceso de sistema operativo interno.
Teoria de procesos
Proceso padre
El proceso padre es el proceso que crea o genera otro proceso. Cuando un proceso padre crea un nuevo proceso, se convierte en el proceso padre de ese nuevo proceso. El proceso padre es responsable de la creación, control y finalización de sus procesos hijos. Puede comunicarse con los procesos hijos, enviarles señales, esperar su finalización y recopilar información sobre ellos.
Es común que un proceso padre cree varios procesos hijos en secuencia o en paralelo para realizar tareas concurrentes o en segundo plano. Nunca un proceso padre tiene que morir antes de los procesos hijos. (Puede ocurrir, pero no es correcto que pase)
Proceso hijo
Un proceso hijo es un proceso que se crea a partir de otro proceso existente, es decir, el proceso padre. El proceso hijo hereda ciertos atributos y recursos del proceso padre, como su espacio de memoria y entorno de ejecución. Un proceso hijo generalmente se ejecuta de manera independiente del proceso padre, aunque puede comunicarse con él a través de mecanismos de comunicación de interproceso.
Herencia de procesos al morir
Cuando tengo dos procesos hijos que siguen ejecutados, su proceso padre muere, y cambian de proceso padre, si vemos sus PID vemos que el PPID (el del padre), cambia por otro PPID de algun otro proceso de mayor jerarquia. Los procesos hijos son heredados por otro proceso padre.
Fork
Fork es una syscall (Llamada al sistema) que esta entre el kernel y el SO, nos permite crear un proceso nuevo
Stack
Una pila (Stack) es una lista ordenada o estructura de datos que permite almacenar y recuperar datos, siendo el modo de acceso a sus elementos de tipo LIFO.
Heap y Memoria Dinamica
La memoria dinámica se refiere a la porción de memoria que se asigna y libera durante la ejecución de un programa. El heap es una región de memoria utilizada para gestionar la asignación y liberación de memoria dinámica, permitiendo la solicitud y liberación flexible de bloques de memoria según las necesidades del programa.
Segmento de texto
Es donde guardamos el binario del comando o proceso que este corriendo. Este segmento en general puede ser compartido entre diferentes procesos, ya que no se modifica, y si contiene código de librerías compartidas no es necesario duplicarlo en memoria.
Creacion de un proceso hijo
A partir de fork me creo un proceso hijo. Ambos procesos, padre e hijo, van a tener el mismo segmento de texto con la diferencia de que:
Si es el hijo va a tener un if que diga: “si es el hijo hace esto”
if proceso_hijo:
(hace esto)
Y si es el proceso padre tendra un if que diga: “si es el padre hace esto”
if proceso_padre:
(hace esto)
Bash
Bash es un intérprete de comandos y un lenguaje de programación de tipo shell utilizado en sistemas operativos Unix y Linux, así como en otros sistemas relacionados. Es el proceso padre de todos los procesos (que a su vez tiene un proceso padre, el init). Bash normalmente se ejecuta dentro de un shell previo llamado "init". En sistemas Unix y Linux, "init" es el primer proceso que se inicia después del arranque del sistema y es responsable de iniciar y administrar otros procesos. Es el proceso raíz en el árbol de procesos y, por lo tanto, se considera el proceso padre de todos los demás procesos en el sistema. Incluso el shell Bash, cuando se inicia en una sesión de terminal, se convierte en un proceso hijo de "init".