cómo son los procesos en GNU/LINUX.
Respuestas a la pregunta
Respuesta:
Explicación:¿Qué es un proceso?
Un proceso es un programa software que se carga en memoria y comienza a ejecutarse de forma secuencial. Un proceso puede, a su vez, según el sistema operativo, contener elementos paralelos de ejecución, como pueden ser hilos (threads). La ejecución de los procesos se puede ver con el comando:
ps xa
En GNU/Linux, cada proceso puede a su vez, lanzar otros procesos hijos. Estos dependerán del padre, de modo que cuando el proceso padre muera, los procesos hijos recibirán la señal de que deben de finalizar su ejecución.
La dependencia de procesos puede verse con el comando:
pstree
Procesos y recepción de Señales
Cada proceso que se ejecuta en el sistema operativo está preparado para recibir una serie de señales y actuar en consecuencia. El comando kill es el empleado de forma cotidiana para enviar de forma manual estas señales.
Las señales que se pueden enviar, en resumen, son:
Número de señal Nombre de señal Descripción
1 SIGHUP Hangup. Se indica al programa que debe de salir. Pero es reprogramable para poder usarse en otros comportamientos, como reload.
9 SIGKILL Kill. Le dice al sistema operativo que debe de terminar de forma forzosa con ese proceso.
15 SIGTERM Terminación. Es reprogramable para poder realizar tareas específicas antes de salir.
19 SIGSTOP Stop. Detiene el proceso, pero sin terminarlo, de modo que se pueda volver a reanudar su ejecución.
18 SIGCONT Continue. Le dice a un proceso parado que continúe su ejecución.
Si queremos enviar a un proceso una señal específica, por ejemplo, que debe de terminar de inmediato, solo habrá que escribir:
kill -9 12123
Esto le dice al sistema operativo que debe de eliminar forzosamente el proceso 12123.
Estados de los procesos
Un proceso puede tener estados básicos de:
Id Estado Estado Descripción
S Sleep Durmiendo. Quiere decir que está en ejecución, pero en ese momento no se encuentra ejecutándose ningún código dentro de la CPU.
D Sleep Es igual que el anterior, pero no es posible interrumpirlo.
T Stopped Parado. Quiere decir que se ha detenido su ejecución.
R Running En ejecución. Es un proceso que se está ejecutando de forma activa en la CPU.
Z Zombie Es un proceso que debería de haber muerto, pero aún tiene dependencias que no es posible terminar. Hasta que no se eliminen sus dependencias no desaparecerá.
Un proceso que está en ejecución en primer plano, es decir, en la consola, puede ser detenido mediante la pulsación de ^C (Ctrl+C). Esta comando, envía al proceso activo la señal de SIGTERM.
Si se presiona la combinación de teclas ^Z (Ctrl+Z), se enviará la señal de SIGSTOP. Para volver a retomar el proceso ejecutar el comando fg.
Entorno de ejecución
Cuando estamos en una consola (un tty, pts o similar), tenemos a nuestra disposición un intérprete de comandos en el que podemos lanzar procesos en cualquier momento.
Estos procesos pueden detenerse mediante la pulsación de ^C, como habíamos dicho antes, pero también pueden detenerse (con ^Z).
¿Qué sucede cuando se detienen?, básicamente, se genera en un entorno de ejecución un identificador (que es informado entre corchetes, justo antes de la palabra Stopped, en el texto que sale nada más pulsar la combinación de teclas).
Este entorno se puede consultar con el comando jobs. Por ejemplo, si ejecutamos el vim y presionamos ^Z, volvemos a la consola con este mensaje:
[1]+ Stopped vim
Si ejecutamos el comando jobs, obtenemos:
$ jobs
[1]+ Stopped vim
A estos comandos podemos acceder directamente por su número, de modo que el comando kill, por ejemplo, se puede emplear de la siguiente forma:
$ kill -18 %1
.