El programa que no responde
Un proceso es un programa mientras se ejecuta. Un servicio es un proceso que el sistema arranca solo y mantiene encendido, como un servidor web.
Imagina que la web del instituto se queda colgada un lunes. El administrador tiene que encontrar el programa, pararlo y volver a arrancarlo. Hoy lo haces tú.
Al terminar esta lección
Nota
Puedo encontrar y parar un programa y arrancar un servicio.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Proceso | un programa mientras se ejecuta | |
| PID | el número que identifica a un proceso | 1234 |
| Señal | un aviso que se manda a un proceso | |
| Servicio | un proceso que el sistema mantiene encendido | |
| systemctl | la orden que arranca y para servicios |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un programa en marcha es un proceso
Cuando abres un programa, el sistema crea un proceso. Le da un número único, el PID, y recuerda qué usuario lo lanzó.
La orden ps lista los procesos. La orden pgrep busca el PID de uno por su nombre. Tú vas a crear un proceso propio que no hace nada, para poder buscarlo y pararlo sin tocar el laboratorio.
Ejemplo: lo que dice una lista de procesos
| PID | Usuario | Programa | Qué significa |
|---|---|---|---|
| 1 | root | systemd | El primero de todos: arranca y cuida los servicios |
| 412 | student | bash | La ventana donde escribes tus órdenes |
| 530 | student | sleep | Un programa que espera sin hacer nada |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Lanza un proceso que espera 301 segundos
sleep 301 &Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Busca su PID por el nombre
pgrep -f "sleep 301"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Parar un proceso es mandarle una señal
Para parar un proceso se le manda una señal. La normal se llama TERM y le pide que termine con orden. La orden pkill la manda por nombre, y kill por PID.
Si el proceso la ignora, queda la señal KILL, con kill -9. Esa no se puede ignorar, pero el proceso no tiene tiempo de guardar nada.
Páralo con la señal normal
pkill -f "sleep 301"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Comprueba que ya no existe
pgrep -f "sleep 301" || echo "ya no existe"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Las dos señales que más se usan
| Orden | Señal | Qué pasa con el proceso |
|---|---|---|
| kill 530 | TERM | Se le pide que termine y puede guardar su trabajo |
| kill -9 530 | KILL | El sistema lo corta al instante, sin aviso |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error frecuente
Advertencia
Mucha gente cree que kill -9 es siempre la forma rápida y correcta de parar algo. No siempre. Corta el proceso sin darle tiempo a guardar. Prueba antes la señal normal, y usa -9 solo si el proceso la ignora.
systemctl para y arranca servicios
Un servicio es un proceso que el sistema arranca solo cuando se enciende la máquina y vuelve a levantar si falla. Quien se ocupa de ello es systemd.
La orden systemctl le habla. is-active pregunta si un servicio funciona, stop lo para y start lo arranca. Pararlo o arrancarlo pide permisos de administrador, así que va con sudo.
Pregunta si el servidor web funciona
systemctl is-active lab-webSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pídele una página de prueba
curl -s --noproxy '*' http://127.0.0.1:8000/hello.txtSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Para el servidor web
sudo systemctl stop lab-webSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pide la página y mira el código
curl -s --noproxy '*' http://127.0.0.1:8000/hello.txt; echo "código $?"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Arranca el servidor web
sudo systemctl start lab-webSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Comprueba que vuelve a responder
curl -s --noproxy '*' http://127.0.0.1:8000/hello.txtSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.