Administración de servidores GNU/Linux

Clase 10: Procesos y servicios

Módulo 1 — Operación de Sistemas Operativos GNU/Linux

Temas de la clase 10

Objetivos de la clase

Al finalizar vas a poder:

  • Identificar qué procesos corren y con qué usuario.
  • Encontrar y terminar un proceso que consume recursos.
  • Controlar trabajos en primer y segundo plano.
  • Iniciar, detener, habilitar y consultar un servicio.
  • Apagar y reiniciar el servidor de forma ordenada.

Retomamos la clase 4

systemctl status ssh
systemctl is-enabled ssh
  • systemd es el PID 1, el primer proceso del sistema.
  • Inicia el resto y organiza el arranque con targets.
  • Hasta ahora solo lo consultamos. Hoy vamos a administrar servicios.

Procesos

Qué corre en el servidor y con qué usuario.

Programa y proceso

Un programa es un archivo, por ejemplo /usr/bin/sleep. Un proceso es una ejecución de ese programa.

Dato Para qué sirve
PID Identificar el proceso; se usa con kill
Usuario Saber con qué identidad corre
Comando Saber qué programa es

El usuario del proceso decide a qué archivos puede acceder, como vimos en la clase 9.

Jerarquía de procesos

Cada proceso tiene un padre (PPID). En la raíz está systemd, PID 1.

pstree -p        # árbol completo con PID
pstree -sp $$    # camino desde PID 1 hasta mi shell

$$ es el PID de la shell actual.

Debian no trae pstree. Hay que instalar el paquete psmisc:

sudo apt install psmisc
systemd(1)───sshd(714)───sshd-session(890)───sshd-session(897)───bash(898)───pstree(…)

La conexión SSH aparece dos veces porque una parte corre como root y otra con tu usuario.

ps: una foto del momento

ps -ef                  # todos los procesos
ps -ef | grep python    # los que tienen «python» en su línea
ps -u cristian          # procesos de un usuario
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 22:39 ?        00:00:00 /sbin/init
root         714       1  0 22:39 ?        00:00:00 sshd: /usr/sbin/sshd -D …
cristian     810     788  0 22:39 ?        00:00:00 sshd-session: cristian@pts/0
cristian     812     810  0 22:39 pts/0    00:00:00 -bash

Las columnas que más usamos son UID (usuario), PID y CMD (comando).

Consumo en tiempo real

ps saca una foto; top muestra una película.

top

top en la VM del curso

top muestra arriba el estado general del equipo y debajo los procesos, ordenados por consumo de CPU. Se actualiza cada pocos segundos y se sale con q.

top: la cabecera

Cabecera de top en la VM
Dato Qué leer
up 3:12 Tiempo encendido
1 user Usuarios conectados
load average Carga de 1, 5 y 15 minutos; se compara con la cantidad de CPU (nproc)
Tareas Procesos por estado, incluidos los zombis
%Cpu(s) us programas, sy kernel, id ocioso, wa espera de disco
MiB Mem RAM total, libre, usada y en búfer/caché
dispon Mem Memoria disponible: la que dice si falta memoria

Con una CPU, una carga de 1 es ocupación plena. Si la carga es alta, la CPU está ociosa y wa es alto, el problema está en el disco.

top: las columnas

Columnas y primeras filas de top en la VM
Columna Qué indica
PID Número del proceso
USUARIO Con qué usuario corre
PR, NI Prioridad del proceso
VIRT Memoria que el proceso tiene reservada
RES Memoria RAM que usa de verdad
SHR Parte de RES compartida con otros procesos
S Estado
%CPU Porcentaje de CPU que usó en el último intervalo
%MEM RES como porcentaje de la RAM total
HORA+ Tiempo de CPU acumulado, no la hora del día
ORDEN Comando

Para ver quién consume memoria se mira RES o %MEM. VIRT suele ser mucho más grande y no indica un problema.

top: la prioridad

La prioridad se ve en NI y va de -20 a 19:

NI Prioridad
-20 La más alta: cuando varios compiten, recibe más CPU
0 La normal; casi todos los procesos tienen 0
19 La más baja: cuando varios compiten, recibe menos CPU

top: estados y teclas

La columna S muestra el estado:

Estado Lectura
R, S Normal: ejecutando o esperando
Z Zombi: ya terminó; mirar el proceso padre
D Esperando disco: muchos, con carga alta, indican un problema de disco
Tecla Acción
P Ordenar por CPU
M Ordenar por memoria
u Mostrar un usuario
1 Una línea por CPU
q Salir

Un proceso que ocupa una CPU entera muestra cerca de 100 % en %CPU.

htop

htop en la VM del curso
  • Muestra lo mismo que top, con barras, colores y desplazamiento.
  • F3 busca, F4 filtra, F5 muestra el árbol, F6 ordena, y q o F10 salen.
  • No viene instalado. Lo instalamos en el laboratorio con sudo apt install htop.

Otra alternativa es btop, que se instala con sudo apt install btop.

Terminar un proceso

Primero se le pide que termine; forzarlo es el último recurso.

¿Cómo obtengo el PID?

Antes de terminar un proceso hay que saber su PID.

pgrep -a python          # PID y comando de los procesos «python»
ps -ef | grep python     # lo mismo, con usuario y más columnas
jobs -l                  # trabajos lanzados desde esta shell

En top y htop está en la columna PID. En htop, F3 busca por nombre.

$ pgrep -a sleep
951 sleep 200
952 sleep 201
$ kill 951
$ pgrep -a sleep
952 sleep 201

kill y killall

kill 1234         # pedir al proceso 1234 que termine
kill -9 1234      # forzarlo: último recurso
killall sleep     # terminar todos los procesos llamados sleep
  • kill usa el PID que sacamos de ps, top o htop.
  • Con -9, el programa no puede cerrar ordenadamente.
  • killall actúa por nombre, así que conviene revisar antes con pgrep -a sleep.
  • killall viene en el paquete psmisc, igual que pstree, y hay que instalarlo.

Después hay que comprobar que terminó: ps -p 1234.

¿Quién puede terminar qué?

Proceso Sin sudo Con sudo
Propio Sí Sí
De otro usuario o de root No: «Operación no permitida» Sí

Un servicio se detiene con systemctl stop.

Para terminar un proceso: identificarlo, usar kill, comprobar, y usar kill -9 solo si sigue vivo.

Primer y segundo plano

Cómo recuperar la terminal sin cortar lo que está corriendo.

Trabajos de la shell

sleep 300 &     # segundo plano: [1] 1234
jobs            # trabajos de esta shell
fg %1           # traer al primer plano
Acción Efecto
comando & Arranca en segundo plano
Ctrl+C Interrumpe el de primer plano
Ctrl+Z Suspende el de primer plano, sin terminarlo
bg %1 Hace que el trabajo suspendido siga corriendo en segundo plano
fg %1 Lo trae al primer plano

[1] es el número de trabajo; 1234, el PID.

Consultas

  • ¿Qué diferencia hay entre Ctrl+Z y Ctrl+C?
  • ¿Por qué conviene probar kill antes que kill -9?

Servicios con systemd

Procesos que systemd arranca, vigila y detiene.

Dos preguntas distintas

Un servicio es una unidad .service, así que ssh equivale a ssh.service.

Pregunta Consulta Se cambia con
¿Corre ahora? systemctl is-active X start, stop, restart
¿Arranca con el sistema? systemctl is-enabled X enable, disable

Las dos respuestas son independientes. Un servicio detenido con stop vuelve a arrancar al reiniciar si está habilitado, y enable no lo inicia en el momento.

Administrar un servicio

systemctl status X            # consultar: sin sudo
sudo systemctl start X
sudo systemctl stop X
sudo systemctl restart X
sudo systemctl reload X       # si el servicio lo admite
sudo systemctl enable X
sudo systemctl disable X
sudo systemctl enable --now X # habilitar e iniciar

Para consultar no hace falta sudo; para cambiar, sí.

Leer systemctl status

● systemd-timesyncd.service - Network Time Synchronization
     Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; preset: enabled)
     Active: active (running) since Sun 2026-09-27 22:39:23 -03; 9min ago
   Main PID: 304 (systemd-timesyn)
     Status: "Contacted time server 170.210.222.2:123 (2.debian.pool.ntp.org)."
     CGroup: /system.slice/systemd-timesyncd.service
             └─304 /usr/lib/systemd/systemd-timesyncd
Línea Qué leer
Loaded Dónde está la unidad y si está habilitada
Active Si corre ahora y desde cuándo
Main PID Proceso principal
CGroup Procesos del servicio

Al final aparecen las últimas líneas de su registro. Si se abre el paginador, se sale con q.

Qué corre y con qué usuario

systemctl list-units --type=service --state=running
systemctl --failed
systemctl cat systemd-timesyncd

De systemctl cat nos interesan dos líneas. ExecStart= es el programa que ejecuta y User= es la cuenta con la que corre. Si User= no figura, en general corre como root.

Consultas

  • Un servicio figura inactive y enabled. ¿Qué pasará al reiniciar?
  • ¿Por qué systemctl status no necesita sudo y systemctl stop sí?

Cuando un servicio falla

El mensaje de error ya indica qué comandos usar.

Diagnóstico inicial

Job for demo-falla.service failed because the control process exited with error
code.
See "systemctl status demo-falla.service" and "journalctl -xeu demo-falla.service"
for details.
  1. systemctl status X: ver si dice failed y leer las últimas líneas.
  2. sudo journalctl -xeu X: el registro del servicio, desde el final.
  3. Corregir la causa.
  4. sudo systemctl restart X y volver a consultar.
sudo journalctl -u X -n 20    # últimas 20 líneas
sudo journalctl -u X -f       # seguir en vivo; salir con Ctrl+C

En la clase 14 vamos a profundizar en los registros.

Apagado y reinicio

Cómo apagar el servidor sin dañar lo que está corriendo.

Apagado ordenado

sudo systemctl poweroff
sudo systemctl reboot
sudo shutdown -r +5 "Reinicio por mantenimiento"
sudo shutdown -c
  • poweroff, reboot y shutdown hacen lo mismo que las órdenes de systemctl.
  • shutdown con un tiempo avisa a los usuarios conectados, y -c lo cancela.
  • En un apagado ordenado se detienen los servicios y se desmontan los sistemas de archivos antes de apagar.

Apagar la VM no es lo mismo

En VirtualBox Qué ocurre
Enviar señal de apagado El sistema hace un apagado ordenado
Apagar la máquina Equivale a cortar la alimentación

Por SSH, poweroff deja el servidor sin acceso hasta que alguien lo encienda. Antes de apagar o reiniciar, confirmá el equipo con hostname.

Revisión mínima de un servidor

systemctl list-units --type=service --state=running
systemctl --failed
top
sudo ss -tlnp
  • ¿Reconozco cada servicio que corre?
  • ¿Hay algo roto?
  • ¿Algo consume de más en top? ¿Con qué usuario corre cada servicio?
  • ¿Qué proceso escucha en cada puerto?

Es mejor que un servicio corra con su propia cuenta y no como root. Si un servicio no se usa, se detiene y deshabilita con sudo systemctl disable --now X.

Actividad práctica — Laboratorio 9

Objetivo: encontrar y terminar un proceso que consume CPU, y administrar un servicio real.

  • Ubicar la propia sesión en el árbol de procesos.
  • Controlar trabajos en primer y segundo plano.
  • Instalar htop y psmisc, detectar un consumo de CPU y terminarlo con kill.
  • Terminar varios procesos por nombre con killall.
  • Consultar, detener, iniciar, deshabilitar y habilitar systemd-timesyncd.
  • Leer su registro y comprobar con qué usuario corre.

Referencias

Volver al índice del curso