¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Procesos y servicios: encontrar y parar un programa

Después de esta lección: Puedo encontrar y parar un programa y arrancar un servicio.

Lección de 45 min10 comandosLaboratorio de comandos de Linux de cada día: los treinta comandos que se escriben de memoria

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

PalabraQué significaEjemplo
Procesoun programa mientras se ejecuta
PIDel número que identifica a un proceso1234
Señalun aviso que se manda a un proceso
Servicioun proceso que el sistema mantiene encendido
systemctlla 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

PIDUsuarioProgramaQué significa
1rootsystemdEl primero de todos: arranca y cuida los servicios
412studentbashLa ventana donde escribes tus órdenes
530studentsleepUn 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

Comando
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

Comando
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

Comando
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

Comando
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

OrdenSeñalQué pasa con el proceso
kill 530TERMSe le pide que termine y puede guardar su trabajo
kill -9 530KILLEl 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

Comando
systemctl is-active lab-web

Se 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

Comando
curl -s --noproxy '*' http://127.0.0.1:8000/hello.txt

Se 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

Comando
sudo systemctl stop lab-web

Se 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

Comando
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

Comando
sudo systemctl start lab-web

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 vuelve a responder

Comando
curl -s --noproxy '*' http://127.0.0.1:8000/hello.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Sobre este laboratorio y su código: Laboratorio de comandos de Linux de cada día: los treinta comandos que se escriben de memoria

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.