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 Eclipse, Android Studio, emuladores, 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.
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.
El 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 gedit
Esto 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 gedit
Ahora 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 10081
Si en el proceso no existe, veremos una salida similar a la siguiente:
kill 41076
bash: kill: (41076) - No existe el proceso
La sintaxis del comando:
kill PDI
El comando Killall
Con el comando Killall
es más sencillo, con tan solo conocer el nombre del proceso que queremos matar es suficiente; por ejemplo, para matarlo; para matar al proceso llamado "firefox":
killall firefox
Para matar el proceso "gedit":
killall gedit
Para matar el proceso "pgadmin3":
killall pgadmin3
Para matar el proceso "google-chrome":
killall google-chrome
Para matar el proceso "nautilus":
killall nautilus
Si en el proceso ("pgadmin3" en este ejemplo) no existe, veremos una salida similar a la siguiente:
killall pgadmin3
pgadmin3: no process found
Cómo podrás darte cuenta, es necesario saber el nombre del proceso que deseas matar del sistema para emplear el comando Killall
.
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter