
Saber qué procesos se ejecutan en Linux es una habilidad esencial para cualquier administrador, usuario avanzado o analista de seguridad. Cada servicio web, base de datos, tarea programada, sesión SSH, script, contenedor o aplicación gráfica se ejecuta como uno o más procesos. Si no sabes verlos, entenderlos y detenerlos correctamente, puedes perder control del sistema.
Linux ofrece herramientas muy potentes para esta tarea: ps, top, htop, pgrep, pstree, systemctl, journalctl, lsof, ss, strace y el sistema de archivos /proc. Red Hat documenta que comandos como ps ax muestran PID, terminal, estado, tiempo acumulado y comando; mientras que top ofrece una vista dinámica con CPU, memoria, prioridad, estado y consumo por proceso.
Idea central: no basta con matar procesos al azar. Primero debes identificar qué proceso es, quién lo ejecuta, desde dónde corre, qué archivos tiene abiertos, qué puertos usa, qué servicio lo inició y si realmente es sospechoso.
1. Qué es un proceso en Linux
Un proceso es una instancia de un programa en ejecución. Cuando abres una terminal, ejecutas Nginx, conectas por SSH, lanzas un script Python o inicias una base de datos, Linux crea procesos con identificadores, usuarios, memoria, CPU, archivos abiertos y relaciones padre-hijo.
El identificador principal es el PID, o Process ID. También existe el PPID, que identifica al proceso padre. Entender esa relación permite saber si un proceso fue iniciado por systemd, por una sesión de usuario, por cron, por un contenedor o por otro programa.
| Campo | Significado |
|---|---|
| PID | Identificador único del proceso. |
| PPID | Identificador del proceso padre. |
| USER | Usuario que ejecuta el proceso. |
| CMD / COMMAND | Comando o programa ejecutado. |
| %CPU / %MEM | Consumo de procesador y memoria. |
| STAT / S | Estado del proceso: ejecutando, durmiendo, detenido, zombie, entre otros. |
2. Ver todos los procesos con ps
ps es el comando clásico para listar procesos. La página manual de ps forma parte de procps-ng, el conjunto de utilidades que obtiene información del sistema de archivos /proc.
Para una revisión rápida, ps aux muestra procesos de todos los usuarios con consumo de CPU y memoria. Para una vista más administrativa, ps -ef muestra PID, PPID, usuario, hora de inicio y comando. Para investigar jerarquías, ps axjf ayuda a ver relaciones padre-hijo.
3. Ver procesos en tiempo real con top
top ofrece una vista dinámica del sistema: carga, tareas, CPU, memoria, swap y procesos ordenados por consumo. Su manual lo describe como una herramienta para mostrar tareas Linux en tiempo real.
| Tecla en top | Función |
|---|---|
| P | Ordenar por CPU. |
| M | Ordenar por memoria. |
| k | Enviar señal a un proceso. |
| r | Cambiar prioridad con renice. |
| q | Salir. |
4. Usar htop para una vista más amigable
htop es un visor interactivo de procesos basado en ncurses. Su sitio oficial lo presenta como un visor interactivo multiplataforma, y su manual indica que permite navegar procesos, revisar consumo y operar de forma más visual que top.
htop es muy útil para principiantes porque permite filtrar, ordenar, ver árbol de procesos, enviar señales y detectar consumo anormal de forma visual. Aun así, en servidores mínimos puede que no esté instalado; por eso conviene dominar también ps y top.
5. Buscar procesos por nombre con pgrep
pgrep permite buscar procesos por nombre, usuario, grupo, terminal, patrón u otros criterios. La página manual de pgrep forma parte de procps-ng y documenta también herramientas relacionadas como pkill y pidwait.
La opción -a ayuda a mostrar el comando completo asociado al proceso. Esto es importante porque un nombre simple como “python” no dice mucho; necesitas saber qué script ejecuta, desde qué ruta y con qué argumentos.
6. Ver árbol de procesos
El árbol de procesos permite saber quién lanzó a quién. Esto es clave para diferenciar un proceso normal de systemd, un proceso hijo de un servicio web, una tarea cron o un script iniciado por un usuario remoto.
Si ves un proceso sospechoso, revisa su proceso padre. Un proceso raro colgando de sshd, cron, apache2, nginx o una sesión de usuario puede dar pistas sobre su origen.
7. Identificar servicios con systemctl
En distribuciones modernas con systemd, muchos procesos pertenecen a servicios. systemctl controla el gestor de sistema y servicios systemd, y permite revisar estado, detener, iniciar, reiniciar o enviar señales a unidades.
Antes de matar directamente un PID, revisa si pertenece a un servicio. Si lo matas sin controlar la unidad, systemd podría reiniciarlo automáticamente o dejar el servicio en estado inconsistente. Para servicios, suele ser más limpio usar systemctl stop servicio o systemctl restart servicio, según corresponda.
8. Revisar logs del proceso o servicio
Antes de detener un proceso sospechoso, revisa evidencia. Con journalctl puedes consultar logs de servicios systemd y del sistema. Esto permite ver errores, reinicios, fallos de autenticación o actividad anormal antes de tomar acción.
Si el proceso tiene un PID concreto, journalctl _PID=PID puede ayudar a revisar eventos relacionados, siempre que el servicio registre en journald.
9. Ver qué archivos tiene abiertos un proceso con lsof
lsof significa “list open files”. En Unix y Linux, archivos abiertos no solo son documentos: también pueden ser sockets, librerías, dispositivos, directorios y conexiones. La página manual de lsof documenta que permite listar archivos abiertos por procesos activos.
Esto permite responder preguntas críticas: ¿qué archivos está leyendo?, ¿qué librerías carga?, ¿qué conexiones tiene?, ¿qué puerto escucha?, ¿qué proceso mantiene ocupado un archivo o directorio?
10. Ver conexiones de red asociadas a procesos
Un proceso sospechoso suele delatarse por sus conexiones. Puede estar escuchando en un puerto inesperado, conectándose a una IP externa o abriendo sockets que no corresponden a su función.
Si un proceso llamado de forma extraña escucha en un puerto alto, o si un proceso que no debería tener red aparece con conexiones externas, debes investigarlo antes de asumir que es normal.
11. Investigar un PID desde /proc
El directorio /proc expone información del kernel y de los procesos. Muchas herramientas como ps, top y pgrep obtienen datos desde allí mediante procps-ng.
| Ruta | Qué revela |
|---|---|
| /proc/PID/exe | Binario real que se está ejecutando. |
| /proc/PID/cwd | Directorio actual del proceso. |
| /proc/PID/cmdline | Comando completo y argumentos. |
| /proc/PID/environ | Variables de entorno, a veces con rutas o secretos. |
| /proc/PID/fd | Descriptores de archivos abiertos. |
Cuidado: al revisar /proc/PID/environ podrías ver variables sensibles. No pegues esa salida en servicios externos ni la compartas sin revisar.
12. Señales de un proceso sospechoso
No todo proceso desconocido es malicioso. Linux ejecuta muchos procesos legítimos con nombres poco familiares. Aun así, hay señales que justifican investigar.
- Proceso ejecutándose desde /tmp, /var/tmp, /dev/shm o una carpeta oculta extraña.
- Nombre parecido a un servicio legítimo, pero mal escrito: sshd2, ngnix, cronx.
- Proceso de usuario común escuchando en un puerto de red sin justificación.
- Consumo alto de CPU durante horas sin tarea conocida.
- Proceso que reaparece después de matarlo.
- Binario eliminado pero todavía en ejecución, visible como deleted en lsof.
- Proceso iniciado por cron, systemd user service o script desconocido.
- Comando ofuscado con base64, curl, wget, sh o bash encadenados.
- Conexiones salientes persistentes a destinos no reconocidos.
- Archivos abiertos en rutas donde no debería tener acceso.
13. Antes de detener: recopila evidencia
Si sospechas de un proceso, no lo mates inmediatamente salvo que esté causando daño activo. Primero recopila información mínima: PID, usuario, comando, binario, ruta, conexiones, archivos abiertos, proceso padre y logs.
Este procedimiento te ayuda a decidir si se trata de un servicio legítimo, un script mal configurado, una tarea pesada, un proceso huérfano o una posible amenaza.
14. Detener procesos con kill, pkill y killall
kill envía señales a procesos o grupos de procesos. La página manual de kill documenta su uso para enviar señales por PID, mientras que signal explica el comportamiento de señales como TERM y KILL.
| Señal | Uso recomendado |
|---|---|
| SIGTERM / 15 | Solicita cierre ordenado. Es la primera opción. |
| SIGKILL / 9 | Fuerza finalización. Usar solo si no responde. |
| SIGHUP / 1 | Algunos servicios la usan para recargar configuración. |
Regla práctica: primero usa TERM. Usa KILL solo si el proceso no responde, porque no permite limpieza ordenada de archivos, conexiones o datos en memoria.
15. Detener procesos por nombre con cuidado
pkill permite enviar señales a procesos que coinciden con un patrón. Es cómodo, pero peligroso si el patrón es demasiado amplio. Antes de usar pkill, prueba con pgrep.
Evita usar patrones como python, java, node o bash sin filtrar, porque podrías cerrar procesos legítimos. En servidores, un error de este tipo puede tumbar aplicaciones críticas.
16. Detener servicios con systemctl, no solo por PID
Si el proceso pertenece a un servicio, usa systemctl. Además, systemd tiene opciones de control de señales y modos de eliminación de procesos. La documentación de systemd.kill advierte que no se recomienda usar KillMode=process o none, porque puede permitir que procesos escapen de la gestión del servicio y queden ejecutándose aunque la unidad se considere detenida.
Cuando un proceso se reinicia solo después de matarlo, revisa si tiene una unidad systemd, un timer, una tarea cron, un supervisor, Docker, Kubernetes, PM2, supervisord o una política de reinicio.
17. Ver procesos que consumen demasiada CPU o memoria
Un proceso con alto consumo no siempre es sospechoso: puede estar compilando, indexando, comprimiendo, haciendo backup o procesando datos. Pero si no hay explicación, debes revisarlo.
También revisa etime, que indica cuánto tiempo lleva el proceso ejecutándose. Un proceso con alto CPU durante minutos puede ser normal; durante días, merece investigación.
18. Detectar procesos zombies
Un proceso zombie ya terminó, pero su proceso padre no recogió su estado de salida. No consume CPU como un proceso activo, pero puede indicar problemas en una aplicación o servicio padre.
Normalmente no puedes matar directamente un zombie porque ya terminó. Debes revisar y corregir el proceso padre, o reiniciar el servicio responsable si corresponde.
19. Investigar procesos con strace
strace permite rastrear llamadas al sistema y señales de un proceso. Su manual indica que imprime el nombre de cada llamada al sistema, sus argumentos y valores de retorno. Es muy útil para diagnóstico, pero debe usarse con cuidado porque puede generar mucha salida y afectar rendimiento.
strace es útil cuando un proceso parece “colgado”, no abre un archivo, no conecta a un socket o falla sin mostrar errores claros. En producción, úsalo durante ventanas controladas.
20. Controlar prioridad con nice y renice
No siempre necesitas detener un proceso. A veces basta con reducir su prioridad para que no afecte a otros servicios. Red Hat incluye nice y renice entre comandos administrativos comunes para cambiar prioridad de procesos.
Un valor nice más alto da menor prioridad al proceso. Esto puede ser útil para backups, compresiones, análisis de logs o tareas de mantenimiento que no deben afectar servicios críticos.
Flujo seguro para investigar y detener un proceso sospechoso
- Identifica: localiza PID, usuario, comando y consumo.
- Relaciona: revisa PPID, árbol de procesos y servicio systemd.
- Investiga: revisa /proc, lsof, ss y journalctl.
- Evalúa: confirma si es legítimo, mal configurado o sospechoso.
- Contén: si es un servicio, usa systemctl; si es un proceso aislado, usa kill -TERM.
- Forza solo si es necesario: usa kill -KILL como último recurso.
- Busca persistencia: revisa cron, timers, servicios, usuarios, scripts y contenedores.
- Documenta: guarda evidencia, comandos ejecutados y resultado.
Comandos esenciales en una sola tabla
| Objetivo | Comando |
|---|---|
| Ver todos los procesos. | ps aux |
| Ver procesos en tiempo real. | top o htop |
| Buscar por nombre. | pgrep -af nombre |
| Ver árbol. | ps axjf o pstree -p |
| Ver puertos y procesos. | ss -tulpn |
| Ver archivos abiertos. | lsof -p PID |
| Ver binario real. | ls -l /proc/PID/exe |
| Detener proceso. | kill -TERM PID |
| Forzar cierre. | kill -KILL PID |
| Detener servicio. | systemctl stop servicio |
Errores comunes al controlar procesos en Linux
- Matar procesos sin revisar qué servicio los creó.
- Usar kill -9 como primera opción.
- Usar pkill -f python o patrones demasiado generales.
- No revisar conexiones de red antes de detener un proceso sospechoso.
- No guardar evidencia mínima para análisis posterior.
- Confundir consumo alto con actividad maliciosa sin validar contexto.
- Ignorar procesos que reaparecen después de matarlos.
- No revisar cron, timers, servicios de usuario o contenedores.
- No consultar logs con journalctl antes de reiniciar servicios.
- Detener procesos críticos en producción sin ventana de mantenimiento.
Preguntas clave
¿Cuál es el comando más rápido para ver procesos?
ps aux para una lista completa, top para vista en tiempo real y htop si quieres una interfaz más amigable.
¿Cómo sé si un proceso es sospechoso?
Revisa usuario, ruta del binario, comando completo, proceso padre, archivos abiertos, puertos, conexiones, logs y persistencia. Una ruta extraña, conexiones externas no justificadas o un proceso que reaparece son señales de alerta.
¿Debo usar kill -9?
Solo como último recurso. Primero usa kill -TERM para permitir cierre ordenado. kill -KILL fuerza la finalización y puede dejar archivos, datos o servicios en estado inconsistente.
¿Qué hago si el proceso vuelve a aparecer?
Busca su mecanismo de persistencia: systemd, cron, timers, supervisord, Docker, Kubernetes, PM2, scripts de inicio o sesiones de usuario. Matar el PID no resuelve la causa.
¿Qué herramienta sirve para saber qué archivos usa un proceso?
lsof -p PID muestra archivos abiertos por un proceso. También puedes revisar /proc/PID/fd.
Recomendamos
- Linux para principiantes: 25 tareas prácticas que debes dominar para pasar de usuario básico a profesional.
- Cómo saber si tu Linux está bien protegido: 30 comprobaciones de seguridad que puedes realizar ahora mismo.
- Guía completa de redes en Linux: comandos, diagnóstico, configuración y solución de problemas.
- Ciberseguridad en Linux: herramientas gratuitas para proteger servidores y estaciones.
- Guía completa de SELinux y AppArmor: cómo proteger aplicaciones y servicios sin complicarte la vida.
En resumen
Controlar procesos en Linux es una competencia básica para administración, rendimiento y seguridad. Con herramientas como ps, top, htop, pgrep, systemctl, journalctl, lsof, ss, strace y /proc puedes saber qué se ejecuta, quién lo inició, qué recursos consume, qué archivos abre y qué conexiones mantiene.
La clave es actuar con método: identificar, investigar, recopilar evidencia, detener de forma ordenada y revisar persistencia. Un proceso sospechoso no se resuelve siempre con kill; muchas veces exige revisar servicios, tareas programadas, usuarios, logs, red y configuración del sistema.
Conclusión editorial
En Linux, cada proceso cuenta una historia: quién lo lanzó, qué hace, qué consume, qué toca y con quién se comunica. Aprender a leer esa historia es una de las mejores defensas contra fallos, abuso de recursos y actividad maliciosa. Antes de matar un proceso, entiéndelo; antes de reiniciar un servicio, revisa sus logs; antes de llamar “malware” a algo, reúne evidencia.

