Si usas Linux, seguro te ha pasado: tu computadora se queda lenta, Eclipse se congela, Android Studio no responde o incluso Chrome empieza a comportarse de manera extraña. Esto sucede cuando un proceso consume demasiados recursos o se queda atascado. La solución: “matar” el proceso para liberar memoria y CPU, y poder seguir trabajando sin reiniciar el sistema.
Dependiendo de la distribución Linux que utilicen, su versión, programas instalados, recursos de la computadora entre otros agentes, muchas cosas pueden salir mal que provoqué que la computadora se "cuelgue" o al menos algún programa en cuestión (sucede bastante a menudo con programas que consuman muchos recursos como Android Studio, emuladores, IAs Locales, XCode, Juegos etc.).
En estos casos lo correcto es simplemente "matar" o destruir el proceso(s) asociado al programa con el objetivo de liberar recursos y posiblemente iniciar el programa nuevamente.
Matar procesos en Linux: conceptos básicos
En Linux, un proceso es la ejecución de un programa en memoria. Para controlarlos, existen herramientas como kill y killall. Ambas permiten terminar procesos, pero funcionan de forma distinta y se usan en situaciones diferentes.
Los comandos Kill y Killall para "matar" procesos
Existen un par de comandos que permiten realizar esta tarea de una manera sencilla; ellos son Kill y Killall.
Qué es un PID y por qué es importante
Cada proceso en Linux tiene un PID (Process ID), un número único que identifica al proceso en ejecución. Kill necesita este PID para saber qué proceso terminar. Es ideal cuando quieres precisión absoluta, por ejemplo, cerrar un Chrome que se colgó sin afectar otras instancias.
Cómo obtener el PID con ps y grep
Para localizar el PID, puedes usar:
ps aux | grep nombre_del_procesoEjemplo, si quieres matar Gedit:
ps aux | grep geditEsto devuelve algo como:
andres 10081 0.3 0.7 666388 35004 ? Sl 11:21 0:00 /usr/bin/geditEl PID aquí es 10081.
Ejemplo práctico usando del comando Kill
Para emplear el comando Kill es necesario conocer el identificador del proceso que queremos matar o destruir; para esto empleamos el comando ps aux:
...
3036 ? S 0:00 /opt/google/chrome/chrome --type=zygote --enable-crash-reporter=DFD73122-B4B8-416D-A254-9ABF21A8B36E
3056 ? Sl 4:35 /proc/self/exe --type=gpu-process --channel=3019.0.65190361 --enable-crash-reporter=DFD73122-B4B8-416D-A254-9ABF2
3062 ? S 0:00 /proc/self/exe --type=gpu-process --channel=3019.0.65190361 --enable-crash-reporter=DFD73122-B4B8-416D-A254-9ABF2
3145 ? Sl 0:08 /opt/google/chrome/chrome --type=renderer --lang=es-419 --force-fieldtrials=AffiliationBasedMatching/Enabled/Audi
3149 ? Sl 0:00 /opt/google/chrome/chrome --type=renderer --lang=es-419 --force-fieldtrials=AffiliationBasedMatching/Enabled/Audi
3152 ? Sl 0:00 /opt/google/chrome/chrome --type=renderer --lang=es-419 --force-fieldtrials=AffiliationBasedMatching/Enabled/Audi
3225 ? Sl 0:00 /usr/libexec/gvfsd-trash --spawner :1.5 /org/gtk/gvfs/exec_spaw/0
3268 ? Sl 1:01 /opt/google/chrome/chrome --type=renderer --lang=es-419 --force-fieldtrials=AffiliationBasedMatching/Enabled/Audi
3525 ? S 0:00 /home/andres/sts-bundle/sts-3.6.4.RELEASE/STS
3527 ? Sl 5:07 /usr/bin/java -Dosgi.requiredJavaVersion=1.6 -Xms40m -Xmx768m -XX:MaxPermSize=256m -jar /home/andres/sts-bundle/s
4306 ? Sl 6:14 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.60-14.b27.fc21.x86_64/bin/java -Dcatalina.base=/home/andres/sts-bundle/pivo
4349 ? Ss 0:02 postgres: postgres oo 127.0.0.1(50352) idle
4468 ? Sl 0:17 /opt/google/chrome/chrome --type=renderer --lang=es-419 --force-fieldtrials=*AffiliationBasedMatching/Enabled/Aud
4510 ? Sl 0:28 /opt/google/chrome/chrome --type=renderer --lang=es-419 --force-fieldtrials=*AffiliationBasedMatching/Enabled/Aud
5568 ? Sl 0:16 /opt/google/chrome/chrome --type=renderer --lang=es-419 --force-fieldtrials=*AffiliationBasedMatching/Enabled/Aud
5624 ? Ss 0:04 postgres: postgres oo 127.0.0.1(51676) idle
6278 ? Sl 0:02 /usr/bin/nautilus --gapplication-service
7712 ? Sl 0:03 /usr/bin/pgadmin3
8133 ? Sl 0:49 /opt/google/chrome/chrome --type=renderer --lang=es-419 --force-fieldtrials=*AffiliationBasedMatching/Enabled/Aud
8207 ? Sl 0:40 /opt/google/chrome/chrome --type=ppapi --channel=3019.108.1263279707 --ppapi-flash-args --lang=es-419 --enable-cr
8381 ? S 0:00 [kworker/u4:2]
8600 ? S 0:01 [kworker/1:0]
9268 ? S 0:00 [kworker/0:3]
9545 ? Sl 0:00 /opt/google/chrome/chrome --type=renderer --lang=es-419 --force-fieldtrials=*AffiliationBasedMatching/Enabled/Aud
9582 ? S 0:00 [kworker/1:2]
9622 ? Sl 0:00 /opt/google/chrome/chrome --type=renderer --lang=es-419 --force-fieldtrials=*AffiliationBasedMatching/Enabled/Aud
9629 ? Sl 0:02 /opt/google/chrome/chrome --type=renderer --lang=es-419 --force-fieldtrials=*AffiliationBasedMatching/Enabled/Aud
9642 ? Sl 0:00 /opt/google/chrome/chrome --type=ppapi --channel=3019.137.1613879471 --ppapi-flash-args --lang=es-419 --enable-cr
9650 ? Sl 1:12 /opt/google/chrome/chrome --type=renderer --lang=es-419 --force-fieldtrials=*AffiliationBasedMatching/Enabled/Aud
9873 ? S 0:00 [kworker/0:0]
9876 ? S 0:00 [kworker/u4:0]
9967 ? Rl 0:00 /usr/libexec/gnome-terminal-server
9970 ? S 0:00 gnome-pty-helper
9971 pts/0 Ss 0:00 bash
10051 ? Sl 0:01 /opt/google/chrome/chrome --type=renderer --lang=es-419 --force-fieldtrials=*AffiliationBasedMatching/Enabled/Aud
10078 ? S 0:00 [kworker/0:1]
10081 ? Sl 0:00 /usr/bin/gedit --gapplication-service
10088 ? S 0:00 [kworker/u4:1]
...Filtrando procesos con el comando ps y grep
Aunque para nuestra sorpresa, hay demasiados procesos manejados por el sistema que no fueron necesariamente iniciados por nuestra persona y forman parte del sistema; para filtrarlos podemos emplear el comando ps en conjunto con el comando grep de la siguiente manera:
ps aux | grep geditEsto nos devuelve un listado muchísimo más reducido:
andres 10081 0.3 0.7 666388 35004 ? Sl 11:21 0:00 /usr/bin/gedit --gapplication-service andres 10231 0.0 0.0 113020 2248 pts/0 S+ 11:24 0:00 grep --color=auto geditAhora podemos matar el programa Gedit asociado al proceso ID 10081 (PDI) (como podemos ver en la salida devuelta anteriormente) sencillamente ejecutamos el siguiente comando:
kill 10081Si en el proceso no existe, veremos una salida similar a la siguiente:
kill 41076
bash: kill: (41076) - No existe el procesoLa sintaxis del comando:
kill PDIQué señales usa kill y cuándo utilizarlas:
- SIGTERM (15): termina el proceso de forma ordenada.
- SIGKILL (9): fuerza la terminación inmediata.
- SIGHUP (1): recarga la configuración del proceso.
- SIGINT (2): interrumpe procesos en primer plano (Ctrl+C).
- En general, primero prueba con SIGTERM; solo usa SIGKILL si no hay otra opción.
El comando Killall
Con el comando Killall es más sencillo, con tan solo conocer el nombre del proceso que queremos matar es suficiente.
Diferencias clave entre kill y killall
- kill: necesita PID → control preciso.
- killall: usa el nombre del proceso → cierra todas las instancias con ese nombre.
Por ejemplo, para matarlo; para matar al proceso llamado "firefox":
killall firefoxPara matar el proceso "gedit":
killall geditPara matar el proceso "pgadmin3":
killall pgadmin3Para matar el proceso "google-chrome":
killall google-chromePara matar el proceso "nautilus":
killall nautilusSi en el proceso ("pgadmin3" en este ejemplo) no existe, veremos una salida similar a la siguiente:
killall pgadmin3
pgadmin3: no process foundCómo podrás darte cuenta, es necesario saber el nombre del proceso que deseas matar del sistema para emplear el comando Killall.
Errores comunes al usar killall
- Es sensible a mayúsculas/minúsculas: firefox ≠ Firefox.
- Puede afectar múltiples instancias no deseadas si no estás atento.
- Usar -9 sin necesidad puede causar pérdida de datos.
Kill vs Killall: cuál usar en cada situación
- Usa kill si quieres cerrar un proceso específico y conoces el PID.
- Usa killall si quieres cerrar todas las instancias de un programa por su nombre.
- En sistemas críticos o servidores, siempre verifica qué procesos estás terminando.
Consejos prácticos para matar procesos sin romper el sistema
- Siempre identifica el PID o nombre correcto.
- Evita kill -9 a menos que el proceso no responda.
- Para procesos que consumen muchos recursos, verifica con:
top- o
htop- Combina ps aux | grep para filtrar procesos concretos.
Errores habituales al matar procesos en Linux
- Matar procesos del sistema como root sin precaución → puede colapsar Linux.
- Confundir mayúsculas y minúsculas en killall.
- No verificar procesos hijos → cerrar el padre también termina hijos inesperadamente.
Preguntas frecuentes sobre kill y killall
- ¿Cuál es la diferencia entre kill y killall?
- Kill usa PID → control preciso. Killall usa nombre → cierra todas las instancias.
- ¿Qué pasa si uso kill -9?
- Forza el cierre del proceso. Puede causar pérdida de datos si el proceso no guarda su estado.
- ¿Cómo saber el PID de un proceso?
- Con ps aux | grep nombre_proceso, pidof o pgrep.
- ¿Es peligroso usar killall?
- Sí, puede cerrar varias instancias sin distinguir. Úsalo con cuidado.
- ¿Qué comando usar si Linux se congela?
- Si la terminal funciona, killall nombre_proceso o kill -9 PID. Si la GUI no responde, xkill puede ser útil.
Conclusión
Dominar kill y killall te da control real sobre Linux. Puedes solucionar bloqueos, liberar recursos y continuar trabajando sin reiniciar. La combinación de kill, killall, pgrep y top te permite manejar tu sistema de manera segura y eficiente. Recuerda: primero ordena el cierre con SIGTERM, luego fuerza solo si es necesario.