Administración de Procesos en Linux
Gestión de procesos en Linux: ps/top/pstree, prioridades nice, /proc, señales, jobs y programación con cron.
Administración de Procesos en Linux
Operational Scope & Technical Objective
Un proceso es una instancia en ejecución de un programa identificada por un PID; sobre ella operan dos primitivas de control: la prioridad (nice value, rango -20 … 19, donde -20 es la máxima prioridad y 19 la mínima) y las señales (kill, que implementa el envío de SIGTERM/SIGKILL/SIGHUP/SIGSTOP, entre otras). El kernel expone además el pseudo-filesystem /proc/<pid>/, que permite inspeccionar el estado de cada proceso sin privilegios elevados. La inspección dinámica se apoya en strace (system calls) y ltrace (library calls), y la programación de tareas repetidas en cron/anacron.
High-Impact Syntax & Command Cheatsheet
Información de procesos
# Sintaxis BSD: todos los procesos, formato usuario, sin terminal
ps aux # a=all, u=usuario, x=procesos sin tty asociada
# Sintaxis estándar (SysV)
ps -ef # snapshot completo
ps -eF # igual, con formato extendido (strace-friendly)
ps -eH # -e procesos de todos los usuarios, -H jerárquico
# Vista dinámica en tiempo real
top
# Árbol de relaciones padre/hijo
pstree -capl
pstree # vista simplificada de la jerarquía
Prioridad (scheduling)
nice -n -20 <command> # arranca el comando con prioridad -20 (máxima)
renice <nice-value> <pid> # reajusta la prioridad de un proceso en marcha
Mapa de memoria de un proceso
cat /proc/1234/maps # rangos de memoria mapeados por el PID 1234
pmap -d 1234 # resumen del mapa de memoria
# gdb: info proc mappings
Pseudo-filesystem /proc
/proc/<pid>/environ # variables de entorno del proceso
/proc/<pid>/cmdline # línea de comando con la que se lanzó
/proc/<pid>/maps # mapa de memoria
/proc/<pid>/fd # file descriptors abiertos
Trazado de llamadas
strace -p <pid> # sigue system calls de un proceso vivo
ltrace -p <pid> # sigue library calls (libc, etc.)
Control del proceso
killall <name> # SIGTERM a todas las instancias del programa
kill <pid> # SIGTERM (por defecto)
kill -9 <pid> # SIGKILL, incondicional
pkill xeyes # mata cualquier proceso que coincida con el criterio
kill -l # lista completa de señales disponibles
Signals clave
| Señal | Uso |
|---|---|
SIGHUP |
Indica al proceso que debe recargar su configuración |
SIGSTOP |
Detiene la ejecución (equivale a Ctrl+Z) |
SIGTERM |
Señal por defecto de kill; terminación limpia |
SIGKILL |
Terminación forzosa; usada cuando SIGTERM no responde |
Estados de proceso
- Running — la CPU está ejecutando el proceso.
- Sleeping — espera un recurso; al obtenerlo vuelve a running.
- Stopped — se le envió SIGSTOP; la CPU deja de ejecutarlo.
- Terminated — el proceso ha muerto.
- Zombie — restos de un proceso muerto sin recoger por su padre; no responde a señales normales de terminación.
Foreground, background y jobs
xeyes # proceso en primer plano; bloquea el shell
xeyes & # proceso en segundo plano; devuelve PID
# Ctrl+Z suspende el proceso en primer plano
jobs # lista procesos suspendidos/en background
bg # reanuda el último job en background
fg # trae el job al foreground
fg %1 / bg %1 # con job id explícito si hay varios
Programación de tareas (cron)
less /etc/crontab # tareas programadas a nivel de sistema
crontab -e # crontab personal del usuario
crontab -l # imprime el contenido del crontab
crontab -r # elimina todos los cronjobs del usuario
Formato: m h dom mon dow command
5 1 2 * * touch /home/bob/cron/crontab-ran.txt # 01:05 cada día 2 del mes
*/5 * * * * touch /home/bob/cron/crontab-ran.txt # cada 5 minutos
SysV init (arranque):
ls -la /etc/init.d # scripts de arranque del sistema
ls -la /etc/rc*.d # runlevels y enlaces a los scripts
Real-World Offensive/Defensive Scenarios
-
Detección de procesos que corren como root (ofensivo): correlacionar
ps aux | grep rootcon cronjobs permite atacar scripts periódicos escritos en rutas que el usuario puede modificar (PATH hijacking o sobrescritura directa).ps aux | grep root -
Monitoreo de actividad periódica: cuando no se dispone de
pspy, un bucle de muestreo de la tabla de procesos revela tareas que se ejecutan cada 1, 2 o 5 minutos:for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; \ sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | \ sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp -
Harvesting de credenciales desde
/proc(ofensivo):/proc/<pid>/environde un servicio expone variables de entorno (claves, tokens) con solo permiso de lectura sobre el proceso. -
Verificación de ACLs en runtime (defensivo): la syscall
access(2)comprueba permisos usando el real UID/GID del proceso llamante, no los effective IDs comoopen(2); conviene tenerlo presente al auditar binarios SUID, donde EUID y RUID divergen.