Un proceso es un programa en ejecución: cada vez que corres algo, el sistema crea un proceso con un número de identidad único llamado PID (Process ID). Para verlos hay dos herramientas clásicas: ps (una foto instantánea de los procesos) y top o htop (una vista en vivo que se actualiza y ordena por consumo de CPU y memoria, ideal para ver qué está devorando la máquina). Para comunicarte con un proceso —normalmente para terminarlo— se le envían señales con kill. La distinción más importante es entre dos señales: SIGTERM (la que envía kill PID por defecto) le pide al proceso que termine con calma, dándole ocasión de guardar y limpiar; y SIGKILL (kill -9 PID) lo mata en el acto, sin darle oportunidad de nada. La regla es: siempre SIGTERM primero; kill -9 es el último recurso, para procesos realmente colgados, porque puede dejar datos a medio escribir. Con pkill y killall podés actuar por nombre en vez de por PID. Entender procesos y señales es la base para diagnosticar por qué la máquina va lenta y para controlar servicios.
Ver índice de contenidos
Qué es un proceso
Un programa es un archivo en disco; un proceso es ese programa corriendo en memoria. Cuando abrís el navegador o lanzás un comando, el sistema crea un proceso, le asigna un PID (su número de identidad), memoria y tiempo de CPU, y lo pone a funcionar. Un mismo programa puede tener varios procesos a la vez (varias pestañas, varias instancias).
Todo proceso tiene un padre y un estado
Los procesos forman un árbol: cada uno fue lanzado por otro (su «padre»), y en la cima está el primer proceso del sistema. Además, cada proceso está en un estado: ejecutándose, durmiendo (esperando algo), detenido o zombi (terminó pero su padre aún no lo «recogió»). Conocer el PID, el padre y el estado es lo que permite entender qué pasa y actuar.
Ver procesos: ps y top
Dos formas de mirar, una fija y otra viva:
# ps: una foto instantánea. La combinación clásica para verlo todo:
ps aux # todos los procesos, con usuario, PID, CPU y memoria
ps aux | grep nginx # filtrar por nombre (ver tuberías)
# top / htop: vista en vivo, se actualiza sola
top # ordena por consumo; se sale con q
htop # versión más cómoda (a veces hay que instalarla)En ps aux, las columnas clave son el usuario dueño, el PID, el %CPU y %MEM (para ver quién consume), y el comando. top es la herramienta a la que acudir cuando «la máquina va lenta»: ordena por consumo y muestra al instante qué proceso se está comiendo los recursos.
Señales: hablar con un proceso
kill PID) pide terminar con calma; SIGKILL (kill -9) mata en el acto. Siempre SIGTERM primero; SIGKILL solo como último recurso.Una señal es un mensaje que se le envía a un proceso. Las más usadas sirven para terminarlo, y la diferencia entre ellas importa mucho:
kill 1234 # envía SIGTERM: pide al proceso 1234 que termine con calma
kill -9 1234 # envía SIGKILL: lo mata en el acto (último recurso)
kill -l # lista todas las señales disponibles
# Actuar por nombre en vez de por PID:
pkill firefox # SIGTERM a los procesos llamados "firefox"
killall nginx # SIGTERM a todos los "nginx"kill -9kill -9 (SIGKILL) no puede ser ignorado ni gestionado por el proceso: el sistema lo elimina sin avisar. Eso significa que el proceso no llega a guardar su trabajo ni a cerrar sus archivos, y puede dejar datos a medio escribir o en estado inconsistente —un riesgo real con bases de datos y servicios—. Por eso la secuencia correcta es: enviar SIGTERM (kill PID), esperar unos segundos, y solo si el proceso sigue realmente colgado, recurrir a kill -9.
Errores frecuentes
- Empezar siempre con
kill -9. Arriesga datos; intentar primero SIGTERM y darle unos segundos. - Matar el proceso equivocado. Confirmar el PID con
psantes; un PID mal copiado puede tumbar otro servicio. - Detener servicios con
killen vez de su gestor. Para servicios, usarsystemctl stop; ver diagnóstico con systemd. - Confundir «mucha CPU» con «colgado». Un proceso ocupado no está roto; mirar el estado, no solo el consumo.
- Ignorar el usuario dueño. No se puede matar el proceso de otro usuario sin privilegios; usar
sudocon cuidado. - Preocuparse por un proceso «zombi» aislado. Suele resolverse solo; solo importa si se acumulan.
- Matar el padre y dejar huérfanos. Terminar el árbol correcto; a veces conviene por PID de grupo.
Preguntas frecuentes
¿Qué es un proceso y qué es el PID?
Un proceso es un programa en ejecución. Conviene distinguir entre el programa, que es un archivo estático almacenado en el disco, y el proceso, que es lo que ocurre cuando ese programa se pone en marcha y el sistema operativo lo carga en memoria y le da vida. Cada vez que se lanza un comando o se abre una aplicación, el sistema crea uno o varios procesos, les asigna memoria, tiempo de procesador y otros recursos, y los gestiona mientras funcionan. Un mismo programa puede dar lugar a varios procesos simultáneos, como ocurre por ejemplo con un navegador que ejecuta cada pestaña en un proceso separado. El PID, que significa identificador de proceso, es el número único que el sistema asigna a cada proceso en el momento de crearlo, y que sirve para referirse a él de forma inequívoca durante toda su vida. Este número es fundamental para la gestión de procesos, porque es la forma en que se identifica a qué proceso concreto se quiere consultar, controlar o terminar. Cuando se quiere, por ejemplo, cerrar un programa que no responde, el procedimiento habitual consiste precisamente en averiguar el PID de su proceso, mediante herramientas como ps o top, y luego usar ese número para enviarle una señal con el comando kill. Además del PID, cada proceso tiene asociado el identificador de su proceso padre, lo que refleja que los procesos se organizan en una jerarquía en forma de árbol.
¿Cuál es la diferencia entre ps y top?
ps y top son las dos herramientas clásicas para observar los procesos del sistema, y su diferencia fundamental está en que ps ofrece una foto instantánea y estática, mientras que top ofrece una vista dinámica y en tiempo real. El comando ps muestra la lista de procesos tal como estaban en el instante exacto en que se ejecutó, y luego devuelve el control, de modo que su salida es como una fotografía congelada del estado del sistema en ese momento; es ideal cuando se quiere capturar la situación, filtrarla o procesarla, por ejemplo combinándolo con otras herramientas para buscar un proceso concreto. El comando top, en cambio, abre una vista que se actualiza continuamente cada pocos segundos y que normalmente ordena los procesos por su consumo de recursos, mostrando en la parte superior los que más procesador o memoria están utilizando; esto lo convierte en la herramienta ideal para diagnosticar situaciones en vivo, como cuando el equipo va lento y se quiere saber qué proceso está acaparando los recursos en ese preciso momento. Existe además una versión mejorada de top llamada htop, que presenta la misma información en tiempo real pero con una interfaz más visual, colorida y cómoda, que permite desplazarse, buscar y enviar señales a los procesos de forma interactiva. En la práctica, ps se usa para inspecciones puntuales y para scripts, mientras que top o htop se usan para monitorizar la actividad del sistema mientras sucede.
¿Qué es una señal en Linux?
Una señal en Linux es un mensaje breve y estandarizado que el sistema operativo o un usuario envía a un proceso para comunicarle algo, habitualmente para pedirle que realice una acción como detenerse, pausarse o recargar su configuración. Es uno de los mecanismos básicos de comunicación y control de procesos del sistema. Cada señal tiene un nombre, que suele empezar por las letras SIG, y un número asociado, y cada una tiene un significado convencional. Algunas señales las genera el propio sistema ante determinadas circunstancias, mientras que otras las envía deliberadamente el usuario mediante comandos como kill, pkill o killall. Cuando un proceso recibe una señal, puede reaccionar de distintas maneras según la señal de que se trate y según cómo esté programado: muchas señales pueden ser capturadas y gestionadas por el proceso, que decide entonces qué hacer al recibirlas, como guardar su estado antes de terminar o releer su archivo de configuración sin reiniciarse. Sin embargo, hay señales especiales que el proceso no puede ignorar ni gestionar, como la que fuerza su terminación inmediata. Las señales más conocidas y usadas en el día a día son las relacionadas con la terminación de procesos, y entre ellas la distinción más importante es la que existe entre pedir a un proceso que termine de forma ordenada, dándole ocasión de limpiar, y forzar su terminación inmediata sin margen de reacción. Comprender el concepto de señal es esencial para controlar adecuadamente los procesos y los servicios del sistema.
¿Cuál es la diferencia entre SIGTERM y SIGKILL?
SIGTERM y SIGKILL son las dos señales que se usan para terminar un proceso, y la diferencia entre ellas es crucial y determina cuál se debe usar en cada situación. SIGTERM, que es la señal que se envía por defecto cuando se usa el comando kill con solo el número del proceso, es una petición de terminación ordenada y cortés: el sistema le pide al proceso que termine, pero le da la oportunidad de reaccionar de forma controlada antes de hacerlo, lo que le permite guardar su trabajo pendiente, cerrar correctamente los archivos que tenía abiertos, liberar los recursos que estaba usando y despedirse limpiamente. Como el proceso puede gestionar esta señal, la terminación resulta segura y no arriesga la integridad de los datos. SIGKILL, que se envía con la opción menos nueve del comando kill, es en cambio una terminación forzada e inmediata que el proceso no puede capturar, ignorar ni gestionar en modo alguno: el sistema simplemente lo elimina en el acto, sin avisarle y sin darle ninguna oportunidad de guardar ni de limpiar. La consecuencia es que SIGKILL puede dejar datos a medio escribir, archivos en estado inconsistente o recursos sin liberar correctamente, lo que es especialmente delicado en el caso de bases de datos y servicios. Por todo esto, la regla práctica es clara: se debe intentar siempre primero SIGTERM y darle al proceso unos segundos para que termine por su cuenta, y solo recurrir a SIGKILL como último recurso cuando el proceso está realmente colgado y no responde a la petición ordenada.
¿Cómo cierro un programa que no responde?
Para cerrar un programa que no responde desde la terminal, el procedimiento recomendado sigue una secuencia pensada para minimizar el riesgo de pérdida de datos. El primer paso es identificar el proceso del programa, averiguando su número de identificación o PID; esto se puede hacer con el comando ps combinado con un filtro por el nombre del programa, o mediante top o htop, que muestran los procesos activos y su consumo. Una vez conocido el PID, o directamente el nombre del programa, el segundo paso es enviarle la señal de terminación ordenada, lo que se logra con el comando kill seguido del PID, o alternativamente con pkill o killall seguidos del nombre del programa si se prefiere actuar por nombre en lugar de por número. Esta señal pide al programa que se cierre de forma controlada, permitiéndole guardar y limpiar, por lo que es la forma más segura y la que siempre debe intentarse primero. El tercer paso solo es necesario si el programa está tan colgado que ni siquiera responde a esa petición ordenada tras esperar unos segundos: en ese caso, y solo entonces, se recurre a la terminación forzada con la opción menos nueve del comando kill, que elimina el proceso de inmediato aunque a costa de perder cualquier trabajo no guardado. Conviene tener cuidado de dirigir la señal al proceso correcto verificando bien el PID, y recordar que para detener servicios del sistema lo adecuado no es usar kill directamente, sino su gestor de servicios correspondiente.
¿Qué es un proceso zombi?
Un proceso zombi es un proceso que ya ha terminado su ejecución pero cuya entrada todavía permanece en la tabla de procesos del sistema porque su proceso padre aún no ha recogido su información de finalización. En el funcionamiento normal de Linux, cuando un proceso hijo termina, no desaparece del todo inmediatamente, sino que queda en un estado especial a la espera de que su proceso padre lea su código de salida, es decir, el resultado con el que terminó; este acto del padre de recoger esa información se realiza mediante un mecanismo específico y, una vez hecho, la entrada del proceso terminado se elimina definitivamente y el zombi desaparece. Un proceso zombi es, por tanto, simplemente un proceso muerto que todavía figura brevemente en la tabla a la espera de ser recogido, y no consume recursos reales como memoria o procesador, sino únicamente una entrada en la tabla de procesos. En la mayoría de los casos los zombis son transitorios y se resuelven solos casi de inmediato, por lo que ver alguno de forma ocasional no es motivo de preocupación. El problema solo aparece cuando los zombis se acumulan en gran cantidad y no se recogen, lo que suele indicar un fallo en el programa padre que no está gestionando correctamente la finalización de sus hijos; en esa situación, la solución habitual pasa por reiniciar o corregir el proceso padre defectuoso, ya que los zombis en sí no se pueden terminar con las señales normales al estar ya muertos.
Fuentes
Documentación oficial y material de la comunidad consultados para esta guía. Fecha de consulta: 28 de julio de 2026.
Aportes de la comunidad Underc0de
- Underc0de, foro. Sección GNU/Linux. Diagnóstico y control de procesos.
- Underc0de, blog. Blog de la comunidad. Artículos de sistemas.