Conceptos Fundamentales
Antes de administrar procesos y servicios, es esencial entender qué son y cómo se relacionan entre sí en el contexto de Linux.
Una instancia de un programa en ejecución. Cuando inicias cualquier programa, el SO lo convierte en uno o varios procesos, cada uno con un identificador único.
Un proceso especial que se ejecuta en segundo plano, sin interacción directa del usuario, generalmente iniciado al arrancar el sistema. Ej: Nginx, SSH, gestor de red.
El primer proceso que arranca en Linux es init (PID 1). En las distribuciones modernas (Ubuntu, Fedora, Debian, RHEL), systemd ha reemplazado a init como gestor de arranque y servicios. Controla el inicio, detención, reinicio y estado de casi todos los servicios del sistema.
Identidad de un proceso
| Identificador | Nombre completo | Descripción |
|---|---|---|
| PID | Process ID | Número único asignado a cada proceso por el sistema operativo para identificarlo. |
| PPID | Parent Process ID | PID del proceso que inició el proceso actual. Todos los procesos tienen un padre, excepto el primero (systemd/init). |
Monitoreo de Procesos
Estos comandos permiten observar qué está ejecutando el sistema y cómo se están consumiendo los recursos.
| Comando | Función | Descripción |
|---|---|---|
| ps | Lista estática | Muestra los procesos que se ejecutan en el momento en que se ejecuta el comando. |
| ps aux | Todos los procesos | Muestra todos los procesos, incluyendo los no asociados a una terminal. La combinación más común. |
| top | Monitor interactivo | Lista dinámica de procesos, actualizada en tiempo real. Ideal para ver consumo de CPU y memoria. |
| htop | top mejorado | Versión avanzada de top, con barras de CPU/Memoria y navegación por teclado. |
Buscar un proceso por nombre
ps aux | grep nginx
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND www-data 1024 0.0 0.1 55380 3200 ? S 08:00 0:00 nginx: worker process root 987 0.0 0.1 55380 2800 ? Ss 08:00 0:00 nginx: master process
pgrep firefox
Señales y Control de Procesos
Linux utiliza señales para comunicarse con los procesos. Son la forma en que el sistema (o el usuario) puede indicarle a un proceso que haga algo: terminar, recargar configuración, pausarse, etc.
Señales principales
| Señal | Número | Comando | Descripción |
|---|---|---|---|
| SIGTERM | 15 | kill <PID> | Terminar (elegante). Pide al proceso que finalice de forma ordenada, guardando su trabajo. Es la señal por defecto. |
| SIGKILL | 9 | kill -9 <PID> | Matar (forzado). Fuerza la terminación inmediata. Usar como último recurso, ya que no permite al proceso limpiarse ni guardar datos. |
| SIGHUP | 1 | kill -1 <PID> | Recargar configuración. Se usa para indicarle a un servicio que relea su archivo de configuración sin detenerse. |
Ejemplo completo — Encontrar y matar Firefox
pgrep firefox
kill 22664
kill -9 22664
killall firefox
kill <PID> (SIGTERM) primero. Solo recurre a kill -9 si el proceso no responde. SIGKILL puede dejar datos corruptos o archivos temporales abiertos.Foreground y Background
Cuando ejecutas un programa desde la terminal, puedes controlarlo entre el primer plano (foreground) y el segundo plano (background).
| Comando | Función |
|---|---|
| & | Ejecutar un comando directamente en segundo plano: comando & |
| Ctrl + Z | Suspender el trabajo en primer plano y enviarlo a la lista de jobs |
| jobs | Listar todos los trabajos suspendidos o en segundo plano de la sesión |
| fg | Traer el último trabajo de segundo plano al primer plano |
| bg | Reanudar un trabajo suspendido en segundo plano |
sleep 3600 & # Iniciar en segundo plano # [1] 12345 jobs # Ver trabajos activos # [1]+ Running sleep 3600 & fg %1 # Traer al primer plano # Ctrl+Z para suspender de nuevo bg %1 # Reanudar en segundo plano
systemctl — Administración de Servicios
En casi todas las distribuciones modernas se utiliza el comando systemctl para controlar los servicios gestionados por Systemd.
Comandos básicos
| Tarea | Comando systemctl | Descripción |
|---|---|---|
| Verificar estado | systemctl status <servicio> | Muestra si el servicio está activo, su estado y las últimas entradas de registro. |
| Iniciar | sudo systemctl start <servicio> | Arranca un servicio que está detenido. |
| Detener | sudo systemctl stop <servicio> | Finaliza la ejecución de un servicio. |
| Reiniciar | sudo systemctl restart <servicio> | Detiene y luego vuelve a iniciar el servicio. |
| Recargar config | sudo systemctl reload <servicio> | Indica al servicio que relea su configuración sin detener el proceso principal. |
reload es menos disruptivo — el proceso sigue corriendo y solo recarga su configuración (equivale a enviar SIGHUP). restart detiene completamente el servicio y lo reinicia, interrumpiendo conexiones activas.Ejemplo — Gestionar el Servidor SSH
El servidor SSH (sshd) es uno de los servicios más comunes en sistemas Linux. Aquí vemos cómo instalarlo, verificarlo y controlarlo.
sudo apt update sudo apt install openssh-server
systemctl status ssh
# o también:
systemctl status sshd
sudo systemctl start ssh
ssh en lugar de sshd? El comando systemctl busca archivos de configuración llamados unidades (.service). En muchas distribuciones Ubuntu/Debian, el archivo se llama /lib/systemd/system/ssh.service. Systemd usa ese nombre (ssh) para gestionar el daemon que internamente se llama sshd.Enable / Disable — Inicio Automático
Para que un servicio se inicie automáticamente cada vez que el sistema arranca, debes habilitarlo. Para que no arranque automáticamente, debes deshabilitarlo.
| Tarea | Comando systemctl |
|---|---|
| Habilitar inicio automático | sudo systemctl enable <servicio> |
| Deshabilitar inicio automático | sudo systemctl disable <servicio> |
| Verificar si está habilitado | systemctl is-enabled <servicio> |
Ejemplo — Apache y CUPS
sudo apt update
sudo apt install apache2
# Habilitar para que arranque con el sistema
sudo systemctl enable apache2
# Deshabilitar si no se necesita impresión sudo systemctl disable cups # Para volver a habilitarlo: sudo systemctl enable cups.service
enable configura el arranque automático pero no inicia el servicio ahora. start inicia el servicio inmediatamente pero no persiste tras reiniciar. Para ambas cosas a la vez usa: sudo systemctl enable --now <servicio>Listar Servicios del Sistema
Para obtener una vista general de todos los servicios gestionados por Systemd, tanto activos como inactivos.
systemctl list-units --type=service
systemctl list-unit-files --type=service
UNIT FILE STATE VENDOR PRESET apache2.service enabled enabled bluetooth.service enabled enabled cups.service disabled enabled ssh.service enabled enabled snapd.service enabled enabled
enabled = arranca con el sistema · disabled = no arranca automáticamente · static = no se puede habilitar/deshabilitar directamente · masked = bloqueado, no puede iniciarse de ninguna forma.Archivos Unit — Definición de Servicios
Cada servicio está definido por un archivo de unidad (Unit File) con la extensión .service. Estos archivos especifican cómo Systemd debe gestionar el servicio: qué comando ejecutar, dependencias, dónde escribir logs, etc.
Ubicaciones de los archivos
/etc/systemd/system/
Archivos creados o modificados por el administrador. Tienen prioridad sobre los de distribución.
/lib/systemd/system/
Archivos instalados por los paquetes de software del sistema. No se deben modificar directamente.
Explorar los archivos de unidad
cd /etc/systemd/system/ && ls cd /lib/systemd/system/ && ls
Recargar Systemd tras modificar un archivo
Si modificas un archivo de unidad, siempre debes notificar a Systemd para que relea los archivos antes de usar el servicio:
sudo systemctl daemon-reload
.service en /etc/systemd/system/ o /lib/systemd/system/ y no ejecutas daemon-reload, Systemd seguirá usando la versión antigua del archivo en memoria. Siempre recarga antes de iniciar o reiniciar el servicio.Ejercicio Práctico Final
Flujo completo que cubre monitoreo de procesos, señales y administración de servicios con systemctl.
ps aux | head -20
pgrep -a firefox # Muestra PID y nombre completo
ps aux | grep firefox
kill <PID> # SIGTERM — elegante (reemplaza <PID> por el número real) # Si no responde: kill -9 <PID> # SIGKILL — forzado
systemctl status ssh
sudo apt install apache2 sudo systemctl enable --now apache2 systemctl status apache2
systemctl list-unit-files --type=service | grep enabled
sudo systemctl disable cups
systemctl is-enabled cups # Verificar: debe mostrar "disabled"