AccesoInicial

Gestion de procesos (ps, top, kill)

Aprende a ver que programas se estan ejecutando en un sistema Linux, quien los ejecuta y como controlarlos desde la terminal.

Principiantelinuxcli

Introducción

Hasta ahora has trabajado con archivos: navegarlos, crearlos, leer sus permisos. Pero un sistema Linux no es solo archivos en disco. En todo momento hay decenas o cientos de procesos en ejecucion: programas que estan haciendo algo ahora mismo.

En esta leccion vas a aprender a ver que procesos hay, quien los ejecuta, cuantos recursos consumen y como detenerlos. Entender los procesos te da visibilidad sobre lo que realmente esta pasando en el sistema, no solo lo que esta almacenado.

¿Por que necesitas ver los procesos?

Los procesos revelan informacion que los archivos no muestran. Un archivo de configuracion puede decir que un servicio *deberia* estar corriendo, pero solo los procesos te confirman que efectivamente esta activo. Ademas, los procesos te dicen como usuario se ejecuta cada programa.

En seguridad ofensiva, la enumeracion de procesos es una de las primeras tareas. ¿Hay un servicio web corriendo como root? ¿Hay un cron job ejecutando un script? ¿Hay otro usuario conectado al sistema? Todo eso se ve a traves de los procesos.

¿Que es un proceso?

Un proceso es un programa en ejecucion. Cada proceso tiene:

  • Un PID (Process ID): numero unico que lo identifica
  • Un usuario propietario: el usuario bajo el cual se ejecuta
  • Un estado: corriendo, dormido, detenido o zombie
  • Un proceso padre (PPID): el proceso que lo inicio

Cuando abres una terminal, el shell (bash) es un proceso. Cuando ejecutas un comando, se crea un nuevo proceso hijo. Cuando el comando termina, ese proceso desaparece.

Procesos en la practica

Ver procesos con ps

El comando basico para ver procesos es ps. Sin opciones, solo muestra los procesos de tu sesion actual:

bash
1$ ps
2  PID TTY          TIME CMD
3 1234 pts/0    00:00:00 bash
4 1250 pts/0    00:00:00 ps
5

Para ver todos los procesos del sistema con informacion completa, usa ps aux:

bash
1$ ps aux | head -10
2USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
3root         1  0.0  0.1 169456 11424 ?        Ss   08:00   0:02 /sbin/init
4root         2  0.0  0.0      0     0 ?        S    08:00   0:00 [kthreadd]
5www-data   845  0.0  0.2  56784 20480 ?        S    08:01   0:01 /usr/sbin/apache2
6root       901  0.0  0.1  72256  8320 ?        Ss   08:01   0:00 /usr/sbin/sshd
7user      1234  0.0  0.0   8564  5120 pts/0    Ss   09:30   0:00 -bash
8

Las columnas mas utiles:

  • USER: quien ejecuta el proceso
  • PID: identificador del proceso
  • %CPU y %MEM: recursos consumidos
  • COMMAND: que programa esta corriendo

Observa que apache2 corre como www-data y sshd corre como root. Saber que usuario ejecuta cada servicio es informacion critica para evaluar el impacto de una vulnerabilidad.

Monitoreo en tiempo real con top

top muestra los procesos en tiempo real, ordenados por consumo de CPU:

bash
1$ top
2

top se actualiza cada pocos segundos y muestra los procesos que mas recursos consumen arriba. Es util para identificar procesos inusuales o que consumen demasiados recursos. Para salir, presiona q.

Detener procesos con kill

Para detener un proceso, necesitas su PID y el comando kill:

bash
1$ kill 1250
2

kill envia una señal al proceso pidiendole que termine de forma ordenada. Si el proceso no responde, puedes forzar su terminacion con la señal SIGKILL:

bash
1$ kill -9 1250
2

Solo puedes matar procesos que te pertenecen. Para matar procesos de otros usuarios, necesitas ser root o usar sudo.

Buscar procesos especificos

Combina ps con grep para encontrar un proceso concreto (aqui aplicas los pipes de la leccion anterior):

bash
1$ ps aux | grep apache
2www-data   845  0.0  0.2  56784 20480 ?   S  08:01  0:01 /usr/sbin/apache2
3

Procesos como radiografia del sistema

Los archivos te dicen que podria estar configurado. Los procesos te dicen que esta pasando ahora. Un archivo de configuracion puede indicar que un servicio esta habilitado, pero si el proceso no aparece en ps, no esta corriendo.

El flujo de reconocimiento de procesos es:

  1. ps aux: ver todos los procesos y quien los ejecuta
  2. Buscar servicios interesantes: bases de datos, servidores web, cron jobs
  3. Identificar que usuario ejecuta cada servicio
  4. Evaluar si algun proceso es inusual o tiene una configuracion que puedas aprovechar

Errores comunes

Advertencia

Usar `kill -9` como primera opcion. La señal -9 (SIGKILL) mata el proceso inmediatamente sin darle oportunidad de cerrar archivos o liberar recursos. Siempre intenta kill sin opciones primero. Solo usa -9 si el proceso no responde.

Advertencia

Ignorar el usuario de los procesos. No basta con ver que un servicio esta corriendo. Fijate en la columna USER. Un servicio que corre como root tiene implicaciones de seguridad muy diferentes a uno que corre como un usuario sin privilegios.

Consejo

Combina `ps aux` con `grep` y `wc`. Para contar cuantas instancias de un proceso hay: ps aux | grep apache | grep -v grep | wc -l. Es un uso natural de los pipes que aprendiste en el modulo anterior.

Conclusión

Los procesos son programas en ejecucion, y cada uno tiene un PID, un usuario propietario y un estado. Con ps aux puedes ver todos los procesos del sistema, con top puedes monitorearlos en tiempo real, y con kill puedes detenerlos. La enumeracion de procesos es una habilidad fundamental porque te muestra lo que el sistema esta haciendo en este momento. En la siguiente leccion aprenderas sobre variables de entorno y el PATH, el mecanismo que define como el sistema encuentra y ejecuta los programas.