103.5 - Crear, monitorizar y matar procesos: Teoria

1. Conceptos fundamentales de procesos

Que es un proceso

Un proceso es una instancia de un programa en ejecucion. Cada proceso tiene:

  • PID (Process ID): Identificador unico numerico
  • PPID (Parent Process ID): PID del proceso padre que lo creo
  • UID/GID: Usuario y grupo propietarios del proceso
  • Estado: Running, Sleeping, Stopped, Zombie, etc.
  • Prioridad: Determina la asignacion de CPU

Proceso init/systemd

El primer proceso que se ejecuta en el sistema es init (o systemd en distribuiones modernas) con PID 1. Todos los demas procesos descienden de el formando un arbol de procesos.

Tipos de procesos

TipoDescripcion
Foreground (primer plano)Ocupa la terminal, el usuario debe esperar a que termine
Background (segundo plano)Se ejecuta sin bloquear la terminal
DaemonProceso de servicio que se ejecuta en segundo plano sin terminal asociada
ZombieProceso que ha terminado pero su padre aun no ha recogido su codigo de salida
OrphanProceso cuyo padre ha terminado; es adoptado por init/systemd

2. Monitorizar procesos con ps

Estilos de opciones

ps soporta tres estilos de opciones:

  • UNIX/POSIX: con guion (-e, -f, -u)
  • BSD: sin guion (aux, x)
  • GNU largo: con doble guion (--forest, --sort)

Importante para el examen: ps aux (BSD) y ps -ef (UNIX) son los dos formatos mas preguntados.

ps aux - Estilo BSD

ps aux

Muestra todos los procesos del sistema con formato detallado:

ColumnaSignificado
USERUsuario propietario del proceso
PIDIdentificador del proceso
%CPUPorcentaje de CPU usado
%MEMPorcentaje de memoria usada
VSZMemoria virtual en KB
RSSMemoria fisica (residente) en KB
TTYTerminal asociada (? = sin terminal)
STATEstado del proceso
STARTHora de inicio
TIMETiempo de CPU acumulado
COMMANDComando que inicio el proceso

Codigos de estado (STAT)

CodigoSignificado
RRunning (ejecutandose o en cola de ejecucion)
SSleeping (durmiendo, esperando un evento)
DUninterruptible sleep (esperando I/O de disco)
TStopped (detenido por una senal)
ZZombie (terminado pero no recogido por el padre)
sLider de sesion
lMulti-hilo
+En el grupo de procesos de primer plano
<Alta prioridad
NBaja prioridad (nice)

ps -ef - Estilo UNIX

ps -ef
ColumnaSignificado
UIDUsuario propietario
PIDIdentificador del proceso
PPIDPID del proceso padre
CUso de CPU
STIMEHora de inicio
TTYTerminal asociada
TIMETiempo de CPU acumulado
CMDComando

Nota: ps -ef muestra el PPID, ps aux no lo muestra por defecto.

Personalizar la salida con -o

# Seleccionar columnas especificas
ps -eo pid,ppid,user,%cpu,%mem,stat,comm
 
# Ordenar por uso de memoria (descendente)
ps -eo pid,user,%mem,comm --sort=-%mem
 
# Ordenar por uso de CPU (descendente)
ps -eo pid,user,%cpu,comm --sort=-%cpu
 
# Mostrar arbol de procesos
ps -ef --forest
 
# Ver procesos de un usuario especifico
ps -u sandra
 
# Ver un proceso por PID
ps -p 1234

Combinar con grep

# Buscar procesos de apache
ps aux | grep apache
 
# Evitar que aparezca el propio grep
ps aux | grep [a]pache

3. Monitorizar procesos con top

Uso basico

top

top muestra los procesos en tiempo real, actualizandose periodicamente (por defecto cada 3 segundos).

Cabecera de top

La cabecera muestra informacion del sistema:

  • Linea 1: Hora actual, uptime, usuarios conectados, load average (1, 5, 15 min)
  • Linea 2: Total de tareas y sus estados (running, sleeping, stopped, zombie)
  • Linea 3: Uso de CPU (us=usuario, sy=sistema, ni=nice, id=idle, wa=I/O wait)
  • Linea 4: Uso de memoria fisica
  • Linea 5: Uso de swap

Teclas interactivas de top

TeclaAccion
kKill: pide PID y senal para matar un proceso
rRenice: cambia la prioridad de un proceso
qSalir de top
POrdenar por uso de CPU (por defecto)
MOrdenar por uso de memoria
NOrdenar por PID
TOrdenar por tiempo de CPU
h o ?Mostrar ayuda
d o sCambiar intervalo de actualizacion
uFiltrar por usuario
cMostrar ruta completa del comando
1Mostrar cada CPU individualmente
lAlternar visualizacion de la linea de uptime
tAlternar visualizacion de lineas de CPU
mAlternar visualizacion de lineas de memoria
WGuardar configuracion actual
SpaceRefrescar inmediatamente

Campos principales de top

CampoDescripcion
PIDIdentificador del proceso
USERPropietario
PRPrioridad del kernel
NIValor nice
VIRTMemoria virtual total
RESMemoria fisica residente
SHRMemoria compartida
SEstado (R, S, D, T, Z)
%CPUPorcentaje de CPU
%MEMPorcentaje de memoria
TIME+Tiempo de CPU acumulado
COMMANDNombre del comando

Opciones de linea de comandos

top -d 5          # Actualizar cada 5 segundos
top -p 1234       # Monitorizar solo el PID 1234
top -u sandra     # Mostrar solo procesos de sandra
top -b            # Modo batch (para redirigir a archivo)
top -n 3          # Ejecutar solo 3 iteraciones (util con -b)
top -b -n 1 > top_output.txt   # Guardar una captura

4. htop

htop es una version mejorada e interactiva de top con interfaz en colores, barras graficas y soporte de raton.

Caracteristicas principales:

  • Barras de colores para CPU, memoria y swap
  • Navegacion con teclas de flechas
  • Busqueda de procesos con F3 o /
  • Filtrar con F4
  • Ordenar con F6
  • Enviar senales con F9
  • Arbol de procesos con F5
  • Se puede desplazar horizontal y verticalmente

Nota: htop no siempre esta instalado por defecto, pero puede aparecer en el examen.


5. Buscar procesos con pgrep

pgrep busca procesos por nombre u otros atributos y devuelve sus PIDs.

pgrep apache         # PIDs de procesos cuyo nombre contiene "apache"
pgrep -u root        # PIDs de procesos del usuario root
pgrep -l apache      # PIDs con nombre del proceso
pgrep -a apache      # PIDs con linea de comandos completa
pgrep -c apache      # Cuenta de procesos que coinciden
pgrep -x cron        # Coincidencia exacta del nombre
pgrep -f "python script.py"  # Buscar en toda la linea de comandos
pgrep -P 1           # Procesos hijos de PID 1

6. Enviar senales a procesos

Que son las senales

Las senales son mecanismos de comunicacion entre procesos (IPC) en Unix/Linux. Permiten notificar a un proceso de un evento o solicitarle una accion.

Senales mas importantes para el examen

NumeroNombreDescripcionComportamiento
1SIGHUPHangupRecarga configuracion o termina. Los daemons suelen recargar su config
2SIGINTInterruptInterrumpe el proceso (como Ctrl+C)
3SIGQUITQuitTermina con core dump
9SIGKILLKillTermina inmediatamente. No puede ser capturada ni ignorada
15SIGTERMTerminateTermina de forma limpia (senal por defecto de kill)
18SIGCONTContinueReanuda un proceso detenido
19SIGSTOPStopDetiene (pausa) un proceso. No puede ser capturada ni ignorada
20SIGTSTPTerminal StopComo SIGSTOP pero desde terminal (Ctrl+Z). Puede ser capturada

Clave para el examen: SIGKILL (9) y SIGSTOP (19) son las unicas senales que no pueden ser capturadas, bloqueadas ni ignoradas por el proceso. SIGTERM (15) es la senal por defecto de kill y permite al proceso terminar limpiamente.

kill - Enviar senales por PID

kill PID             # Envia SIGTERM (15) por defecto
kill -15 PID         # Equivalente al anterior
kill -SIGTERM PID    # Equivalente al anterior
kill -TERM PID       # Equivalente al anterior
kill -9 PID          # Envia SIGKILL (fuerza terminacion inmediata)
kill -KILL PID       # Equivalente al anterior
kill -1 PID          # Envia SIGHUP (recarga configuracion)
kill -HUP PID        # Equivalente al anterior
kill -l              # Lista todas las senales disponibles
kill -0 PID          # Verifica si el proceso existe (no envia senal)
 
# Matar multiples procesos
kill 1234 5678 9012
kill -9 1234 5678

killall - Enviar senales por nombre

killall apache2       # SIGTERM a todos los procesos llamados "apache2"
killall -9 firefox    # SIGKILL a todos los procesos llamados "firefox"
killall -u sandra     # Mata todos los procesos del usuario sandra
killall -i apache2    # Modo interactivo: pide confirmacion
killall -w apache2    # Espera a que todos los procesos terminen
killall -v apache2    # Modo verbose

Importante: killall usa el nombre exacto del proceso.

pkill - Enviar senales por patron

pkill apache          # SIGTERM a procesos cuyo nombre contiene "apache"
pkill -9 firefox      # SIGKILL a procesos cuyo nombre contiene "firefox"
pkill -u sandra       # Mata procesos del usuario sandra
pkill -f "python script.py"  # Busca en la linea de comandos completa
pkill -t pts/0        # Mata procesos de una terminal especifica
pkill -P 1234         # Mata procesos hijos del PID 1234

Diferencia: pkill hace coincidencia parcial (patron), killall requiere nombre exacto.

Atajos de teclado para senales

CombinacionSenalEfecto
Ctrl+CSIGINT (2)Interrumpe el proceso en primer plano
Ctrl+ZSIGTSTP (20)Suspende el proceso en primer plano
Ctrl+\SIGQUIT (3)Termina el proceso con core dump

7. Gestion de trabajos (jobs)

Primer plano y segundo plano

Cuando ejecutas un comando en la terminal:

  • Primer plano (foreground): La terminal queda bloqueada hasta que termine
  • Segundo plano (background): La terminal queda libre para seguir trabajando

Ejecutar en segundo plano con &

sleep 300 &           # Ejecuta en segundo plano
# [1] 12345           # Muestra: [numero_job] PID

Suspender y mover procesos

# 1. Ejecutar un proceso largo
find / -name "*.log" 2>/dev/null
 
# 2. Suspenderlo con Ctrl+Z
# [1]+ Stopped    find / -name "*.log" 2>/dev/null
 
# 3. Ver trabajos
jobs
# [1]+  Stopped    find / -name "*.log" 2>/dev/null
 
# 4. Reanudar en segundo plano
bg %1
 
# 5. Traer a primer plano
fg %1

El comando jobs

jobs              # Lista trabajos del shell actual
jobs -l           # Lista con PIDs
jobs -p           # Solo muestra PIDs
jobs -r           # Solo trabajos en ejecucion (running)
jobs -s           # Solo trabajos detenidos (stopped)

Indicadores de jobs

SimboloSignificado
+Trabajo actual (el mas reciente, usado por defecto con fg y bg)
-Trabajo anterior
(sin simbolo)Otros trabajos

Referencia a trabajos

fg %1             # Trabajo numero 1
fg %+             # Trabajo actual (el del +)
fg %-             # Trabajo anterior (el del -)
fg %%             # Igual que %+
fg %nombre        # Trabajo cuyo comando empieza por "nombre"
fg %?cadena       # Trabajo cuyo comando contiene "cadena"

bg y fg

bg                # Reanuda el trabajo actual en segundo plano
bg %2             # Reanuda el trabajo 2 en segundo plano
fg                # Trae el trabajo actual a primer plano
fg %2             # Trae el trabajo 2 a primer plano

8. nohup - Inmunidad a SIGHUP

Cuando cierras una terminal o sesion SSH, el shell envia SIGHUP a todos sus procesos hijos, lo que normalmente los termina. nohup hace que un proceso ignore la senal SIGHUP.

nohup comando &

Comportamiento de nohup:

  • El proceso ignora SIGHUP
  • La salida estandar y de error se redirige a nohup.out (si no se redirige explicitamente)
  • El proceso continua ejecutandose despues de cerrar la terminal
# Ejemplo tipico
nohup ./backup.sh &
 
# Redirigir salida a un archivo especifico
nohup ./backup.sh > /var/log/backup.log 2>&1 &

Para el examen: nohup protege contra SIGHUP, pero el proceso si puede ser matado con SIGKILL o SIGTERM. nohup NO convierte un proceso en daemon.


9. Multiplexores de terminal: screen y tmux

screen

screen permite crear multiples sesiones de terminal virtuales que persisten incluso si cierras la conexion.

screen                    # Inicia nueva sesion
screen -S nombre          # Inicia sesion con nombre
screen -ls                # Lista sesiones activas
screen -r nombre          # Reconectar a sesion
screen -r PID             # Reconectar por PID
screen -d -r nombre       # Desconectar de otro lugar y reconectar aqui

Atajos dentro de screen (prefijo Ctrl+a):

AtajoAccion
Ctrl+a dDesconectar (detach) de la sesion
Ctrl+a cCrear nueva ventana
Ctrl+a nSiguiente ventana
Ctrl+a pVentana anterior
Ctrl+a "Lista de ventanas
Ctrl+a kMatar ventana actual
Ctrl+a ?Ayuda

tmux

tmux es un multiplexor mas moderno que screen.

tmux                      # Inicia nueva sesion
tmux new -s nombre        # Inicia sesion con nombre
tmux ls                   # Lista sesiones
tmux attach -t nombre     # Reconectar a sesion
tmux kill-session -t nombre  # Matar sesion

Atajos dentro de tmux (prefijo Ctrl+b):

AtajoAccion
Ctrl+b dDesconectar de la sesion
Ctrl+b cCrear nueva ventana
Ctrl+b nSiguiente ventana
Ctrl+b pVentana anterior
Ctrl+b %Dividir panel verticalmente
Ctrl+b "Dividir panel horizontalmente
Ctrl+b oCambiar de panel
Ctrl+b xCerrar panel actual

Clave para el examen: La diferencia principal entre screen y tmux es el prefijo de teclas: Ctrl+a para screen, Ctrl+b para tmux. Ambos permiten que las sesiones persistan al desconectar.


10. Otros comandos de monitorizacion

watch - Ejecutar comandos periodicamente

watch comando             # Ejecuta cada 2 segundos (por defecto)
watch -n 5 df -h          # Ejecuta cada 5 segundos
watch -d ls -la           # Resalta diferencias entre ejecuciones
watch -d=cumulative ls -la  # Acumula los cambios resaltados
watch -t df -h            # Sin cabecera (titulo)
watch "ps aux | grep apache"  # Usar comillas para comandos con pipes

uptime - Tiempo de actividad del sistema

uptime
# 14:30:25 up 45 days, 3:22, 2 users, load average: 0.15, 0.10, 0.05

Informacion que muestra:

  • Hora actual
  • Tiempo que lleva el sistema encendido
  • Numero de usuarios conectados
  • Load average: Carga media del sistema en 1, 5 y 15 minutos

Load average: Un valor de 1.0 en un sistema con 1 CPU significa que la CPU esta al 100%. En un sistema con 4 CPUs, un load average de 4.0 seria el 100%.

free - Uso de memoria

free                # Muestra en kilobytes
free -m             # Muestra en megabytes
free -g             # Muestra en gigabytes
free -h             # Formato legible (human-readable)
free -s 3           # Actualizar cada 3 segundos
free -t             # Muestra total de RAM + swap

Columnas de free:

ColumnaDescripcion
totalMemoria total instalada
usedMemoria usada
freeMemoria libre (completamente sin usar)
sharedMemoria compartida (tmpfs)
buff/cacheMemoria usada por buffers y cache
availableMemoria disponible para nuevos procesos (free + cache liberable)

Importante: available es mas relevante que free para saber cuanta memoria puede usar un nuevo proceso, porque Linux usa agresivamente la memoria libre como cache.


11. Comandos adicionales de procesos

pstree - Arbol de procesos

pstree muestra los procesos del sistema en formato de arbol, visualizando la relacion padre-hijo entre procesos.

pstree                    # Muestra el arbol completo desde init/systemd
pstree -p                 # Muestra PIDs junto a los nombres
pstree -u                 # Muestra cambios de usuario entre procesos
pstree -a                 # Muestra argumentos de linea de comandos
pstree -h                 # Resalta el proceso actual y sus ancestros
pstree -H PID             # Resalta un PID especifico y sus ancestros
pstree sandra             # Muestra solo procesos del usuario sandra
pstree -p 1234            # Muestra el arbol a partir del PID 1234
pstree -s 1234            # Muestra los ancestros del PID 1234

Ejemplo de salida:

systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─sshd───sshd───bash───pstree
        ├─cron
        └─rsyslogd───3*[{rsyslogd}]

Para el examen: pstree es util para visualizar la jerarquia de procesos. La opcion -p para ver PIDs es la mas preguntada.

pidof - Obtener PID por nombre de programa

pidof devuelve el PID de un programa en ejecucion buscando por su nombre exacto.

pidof sshd                # Devuelve el/los PID(s) del proceso sshd
pidof -s sshd             # Devuelve solo UN PID (single shot)
pidof -x script.sh        # Busca tambien en scripts

Diferencia con pgrep:

ComandoCoincidenciaTipo
pidofNombre exacto del programaComando externo
pgrepPatron parcial (regex)Comando externo
# pidof busca por nombre exacto del ejecutable
pidof bash                # Devuelve PIDs de todos los procesos bash
 
# pgrep permite patrones parciales
pgrep -l bas              # Encuentra bash, basename, etc.

Directorio /proc/PID/

El sistema de archivos virtual /proc contiene un subdirectorio por cada proceso en ejecucion, nombrado con su PID. Estos directorios contienen informacion detallada del proceso en forma de archivos virtuales.

# Ver informacion del proceso con PID 1 (init/systemd)
ls /proc/1/

Archivos mas importantes dentro de /proc/PID/:

ArchivoDescripcion
/proc/PID/cmdlineLinea de comandos con la que se inicio el proceso
/proc/PID/statusEstado del proceso (nombre, estado, PID, PPID, UIDs, memoria, etc.)
/proc/PID/fd/Directorio con enlaces simbolicos a los descriptores de archivo abiertos
/proc/PID/environVariables de entorno del proceso
/proc/PID/cwdEnlace simbolico al directorio de trabajo actual del proceso
/proc/PID/exeEnlace simbolico al ejecutable del proceso
/proc/PID/mapsRegiones de memoria mapeadas
/proc/PID/statInformacion de estado en formato numerico (usado por ps)
/proc/PID/ioEstadisticas de entrada/salida del proceso
# Ver la linea de comandos de un proceso
cat /proc/1234/cmdline | tr '\0' ' '
 
# Ver el estado de un proceso
cat /proc/1234/status
 
# Ver los descriptores de archivo abiertos
ls -la /proc/1234/fd/
 
# Ver el directorio de trabajo de un proceso
readlink /proc/1234/cwd
 
# Ver el ejecutable de un proceso
readlink /proc/1234/exe

Para el examen: /proc/PID/ es una fuente fundamental de informacion sobre procesos. Los archivos cmdline, status y fd/ son los mas relevantes. Toda la informacion que muestra ps proviene de /proc.


12. Resumen de flujo de trabajo tipico

1. Ejecutar proceso:        comando &     (background)
2. Ver trabajos:            jobs -l
3. Buscar procesos:         ps aux | grep nombre
                            pgrep -l nombre
4. Monitorizar en vivo:     top / htop
5. Suspender proceso:       Ctrl+Z
6. Reanudar background:     bg %n
7. Traer a foreground:      fg %n
8. Terminar limpiamente:    kill PID       (SIGTERM)
9. Forzar terminacion:      kill -9 PID    (SIGKILL)
10. Matar por nombre:       killall nombre / pkill patron
11. Proteger de logout:     nohup comando &
12. Sesion persistente:     screen / tmux

Trampas del examen

Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:

  • kill envia SIGTERM (15) por defecto, NO SIGKILL (9)kill PID envia SIGTERM, que permite al proceso terminar limpiamente. kill -9 PID envia SIGKILL, que fuerza la terminacion inmediata y no puede ser ignorada. El examen puede preguntar que senal se envia por defecto.
  • SIGTERM vs SIGKILL vs SIGHUP — SIGTERM (15) pide terminar limpiamente; SIGKILL (9) fuerza terminacion sin limpieza; SIGHUP (1) indica que la terminal se cerro (algunos demonios lo usan para recargar configuracion). El examen puede confundir sus numeros.
  • kill vs killall vs pkillkill requiere PID; killall usa el nombre exacto del proceso; pkill usa patrones (coincidencia parcial). El examen puede preguntar cual comando usar cuando solo se conoce parte del nombre.
  • & pone en background; Ctrl+Z suspendecomando & ejecuta en segundo plano; Ctrl+Z detiene (SIGTSTP) el proceso en primer plano. Despues de Ctrl+Z, se usa bg para reanudar en background o fg para foreground.
  • nohup protege de SIGHUP al cerrar la terminalnohup comando & permite que el proceso siga ejecutandose despues de cerrar la sesion. Sin nohup, los procesos en background reciben SIGHUP al cerrar la terminal. El examen puede preguntar como sobrevivir al cierre de sesion.
  • ps aux vs ps -ef — Son equivalentes en la practica pero con formato diferente. aux es estilo BSD (sin guion); -ef es estilo UNIX (con guion). El examen puede preguntar las diferencias de formato.
  • top: la columna NI no es lo mismo que PR — NI es el valor nice (ajustable); PR es la prioridad real del kernel (PR = 20 + NI). El examen puede confundir ambas columnas.
  • free -h muestra RAM, no discofree muestra memoria RAM y swap; df muestra espacio en disco. El examen puede confundir estos comandos en un escenario de “disco lleno” vs “memoria llena”.
  • Los jobs son locales al shelljobs solo muestra procesos del shell actual. Al abrir otra terminal, jobs no muestra los procesos de la terminal anterior. El examen puede preguntar por que jobs no muestra un proceso que se inicio en otra sesion.