Linux: matar procesos usando Kill, Pkill y Killall

Linux nos da tres opciones para matar procesos desde el terminal: kill, pkill y killall.

Antes de ver los tres comandos es importante recordad un punto: un usuario normal solo puede matar sus procesos, no los procesos del sistema o los de otro usuario. Un usuario root en cambio sí puede matar cualquier proceso, tanto del sistema como de otro. Realmente, a pesar de sus nombres, estos tres comandos no están pensados exclusivamente para matar procesos, sino que les pueden enviar todo tipo de señales, aunque sí es cierto que matar procesos es el comportamiento por defecto.

El comando kill nos permite matar un proceso identificándolo por su número identificador (PID), la sintaxis básica es kill -señal PID. El valor de la señal varía entre 64 posibilidades, siendo las que permiten matar procesos estas tres: SIGHUP (que se abrevia también con el valor numerico 1), SIGKILL(que se abrevia con el valor numérico 9) o SIGTERM(que se abrevia con el valor numérico 15). Si no ponemos ningún valor el tomado por defecto será 15, que es el más seguro pues no permite que se mate un proceso que esté en ejecución sino que espera a que termine y lo mata en ese momento, mientras que el valor 9 sería el más inseguro y contundente, mata al proceso incluso aunque esté ocupado. En el ejemplo siguiente veremos como matar un proceso que, por ejemplo, tenga el id 2015, primero con el valor por defecto y luego con la opción -9 o SIGKILL (las dos últimas sería la misma instrucción pero con distinta sintaxis):

kill 2015
kill -SIGKILL 2015
kill -9 2015

También podemos matar varios procesos en la misma instrucción. Imaginemos que queremos matar los procesos 2015, 2022 y 3049, solo tenemos que listarlos tras la instrucción kill separados por un espacio:

kill 2015 2022 3049

Si no queremos estar listando los procesos para poder ver sus PID podemos también matar un proceso por su nombre. Eso lo puedes hacer con el comando killall, que lo que hará será matar todos los procesos que coincidan con el nombre del comando. Imagina que quieres matar el proceso de mysql en tu servidor Linux, de esta forma lo harías, pero ojo porque si tienes varias instancias las mataría todas. Las señales para killall son distintas de las de kill, puedes listarlas ejecutando killall -l aunque coincide que el valor -9 también es el que podemos usar para matar el proceso de forma forzosa.

killall -9 mysql

Finalmente nos queda pkill, un comando que fue creado originalmente para el sistema operativo Solaris y cuyo funcionamiento es similar al de killall, la diferencia es que en este caso no necesitamos saber todo el nombre del proceso pues podemos usar exprexiones regulares para definir qué proceso queremos parar. Igual que en el ejemplo anterior veamos cómo terminaríamos el proceso de mysql, con el parámetro -e para que la consola nos informe de que lo ha eliminado.

pkill -e mysql

Cómo ver los metadatos de una imagen desde el terminal de Ubuntu con Imagemagick

En su día habíamos hablado sobre cómo eliminar los metadatos de una imagen en equipos con Linux, hoy vamos a ver cómo consultar esos metadatos.

Lo haremos con la herramienta Identify, que es parte del paquete de software ImageMagick presente en varios repositorios. En cualquier distribución derivada de Debian, como pueden ser Ubuntu o Mint, estará presente. Basta con abrir un terminal y teclear:

sudo apt-get install imagemagick

Ahora nos bastaría ejecutar el comando identify con la ruta de la imagen para ver sus datos:

identify nombredelaimagen.jpg

La saldría sería algo así:

¿Te parece poco detalle? Bueno, puedes sacar toda la información disponible usando el parámetro -verbose:

identify -verbose nombredelaimagen.jpg

En la captura que hice solo me entraban parte de los datos por estar en el portátil, para que te hagas una idea:

Encontrar y matar procesos zombie en Linux

No sólo hay zombies en la ficción, también pululan por tu sistema Linux. Tranquilo, la pantalla de tu portátil no se cerrará de golpe mordiéndote la mano y convirtiéndote en un extra de peli de Romero, se trata de un estado en el que pueden entrar algunos procesos secundarios, que aunque terminan se mantienen en la tabla de procesos hasta que termina el principal, ocupando algo de memoria. No son especialmente problemáticos ni consumen mucho, aunque si un programa deja varios procesos hijo por ahí sueltos puede ser un problema para la RAM.

¿Cómo puedo listar los procesos en estado zombie en mi equipo?

Es sencillo. Usando el comando ps podemos listar todos los procesos presentes en la tabla de procesos. Uno de los valores que tendremos en la salida de ps es el estado del proceso, que será Z para los procesos zombie. Por lo tanto, el siguiente comando listará todos los procesos zombie:

ps aux | grep 'Z'

¿Cómo eliminamos un proceso zombie?

En si no podemos matar un proceso zombie con el comando kill porque ya está muerto, la única opción sería hacerlo a través del proceso padre. Para eso necesitamos saber el pid del padre, por lo que haremos la búsqueda de procesos zombie de está forma:

ps ef | grep 'Z'

La tercera columna de la respuesta tendrá el id del proceso padre de nuestro proceso zombie. Para forzar la eliminación de estos procesos hijo zombificados usamos el siguiente comando:

kill -s SIGCHLD pid_del_proceso_padre

Usar cURL en Linux para bajar varios ficheros con un mismo comando.

Si hace unos meses veíamos cómo nos podemos servir de cURL en Linux para descargar un fichero desde una URL hoy vamos a expandir un poco esta entrada: ¿podemos descargar varios ficheros a la vez con el mismo comando? Pues sí.

La sintaxis es muy simple. Recordemos primero ¿Cómo descargamos un fichero con cURL?

curl -O http://dominio.com/fichero.tar.gz

Recordado esto ¿cómo descargamos varios? Pues muy simple, añadimos más url precedidas del parámetro -O tal que así:

curl -O http://dominio.com/fichero.tar.gz -O http://dominio.com/ficheroB.tar.gz -O http://dominio.com/ficheroC.tar.gz

Ejecutar apps de Android en Linux con Anbox

Aunque el núcleo de Android es Linux sus aplicaciones no son compatibles de forma nativa con una distribución de GNU/Linux. Para correr aplicaciones Android en un sistema Linux necesitamos un emulador al estilo de Wine (que nos permite correr aplicaciones de Windows).

Existen hoy por hoy varios proyectos de emuladores que nos permiten hacer esto en nuestros sistemas Linux pero ha sido Anbox el que me ha parecido más interesante ¿por qué? Porque Anbox se sirve del propio kernel de nuestra distribución para trabajar, sobre el que extiende una capa de compatibilidad. ¿Qué implica esto? Que al no tener que emular el kernel consume menos recursos que sus competidores. Nuestro hardware queda menos cargado con el.

Podemos instalarlo mediante paquetes snap o desde la tienda de apps o los repositorios de nuestra distro. Una vez instalado basta con instalar en nuestro equipo el .apk de la aplicación que queremos correr. Para facilitar esta instalación lo mejor es que instalemos también AndroidDebugBridge (ADB), una herramienta para desarrolladores Android:

# Instalar ADB en Ubuntu y familia
$ sudo apt install android-tools-adb

# Instalar ADB en Fedora
$ sudo dnf install android-tools

Virtual Box: Compartir una carpeta de un anfitrión Windows en una máquina con Ubuntu.

El primer paso para este tutorial nos remite a una entrada antigua: hay que instalar las Guest Additions de Virtual Box para comenzar. Es un paso indispensable, pues sin las Guest Additions no va a funcionar.

Ok, ya tenemos nuestro sistema operativo Ubuntu (o familia) instalado en una máquina virtual de Virtual Box y con las Guest Additions instaladas. Ahora tenemos que irnos a Configuración, allí a Carpetas Compartidas y allí elegimos la carpeta a compartir y le asignamos un nombre (para el ejemplo le he puesto vbox).

Tras esto nos vamos a nuestro Ubuntu y abrimos un terminal de línea de comandos. Lo primero que haremos será crear un punto de montaje para nuestra carpeta. En el ejemplo le llamaremos «carpeta«:

sudo mkdir /media/carpeta

Y lo siguiente es ejecutar el montaje de la carpeta. En mi caso la carpeta en Windows se llama vbox y el punto de montaje carpeta, en el vuestro poned los que correspondan:

sudo mount -t vboxsf vbox /media/carpeta

Si queréis que la carpeta se monte siempre al arrancar el sistema el truco es editar el fichero /etc/init.d/rc.local y añadir a él la línea que usamos para montar la carpeta.

Utilizar el comando expr para hacer operaciones

El comando expr del terminal de Linux nos permite evaluar una expresión y pintar su resultado. De esta forma podemos usarlo para ejecutar operaciones aritméticas o de comparación.

$ expr 15 + 3
$ expr 15 % 3
$ expr 15 \* 3
$ expr 15 – 3
$ expr 15 / 3

En el ejemplo de arriba puedes ver los ejemplos para suma, operación de módulo, multiplicación (ese caso requiere usar el carácter \ para escapar el asterisco que usamos como símbolo de multiplicación), resta y división.

¿Limitaciones? Pues que solo nos permite operar con números enteros: únicamente acepta enteros como parámetros y tan solo devuelve enteros como resultado

Otra cosa que nos permite expr es ejecutar operaciones de comparación:

$ expr 15 = 3
$ expr 15 != 5
$ expr 15 \> 3
$ expr 15 \< 3
$ expr 15 \<= 3

Devolverá 1 en caso de que la comparación sea verdadera y 0 en el caso contrario. De nuevo el carácter \ será necesario para escapar los caracteres de mayor y menor en las comparaciones.

No solo podemos usarlo desde el terminal para operar, expr también puede resultar de utilidad invocado dentro de alguno de nuestros scripts.

Activar Windows Subsystem for Linux en Windows 10 e instalar una distribución de Linux

Ya en su día hablamos aquí sobre cómo activar el bash de Ubuntu en Windows10. Vamos a actualizar y ampliar un poco esto viendo cómo activar el Windows Subsystem for Linux en Windows y cómo instalar después una distribución de Linux:

El primer paso es activar en nuestro Windows 10 la característica del subsistema para Linux. Para eso tenemos que abrir el PowerShell y ejecutar el siguiente comando:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Tras esto toca reiniciar para completar la activacion. Una vez realizado tenemos dos opciones para instalar nuestra distribución. La primera y más cómoda, para las versiones más actualizadas de Windows 10, es hacerlo directamente desde el Windows Store, la tienda de aplicaciones de Microsoft. Están disponibles Ubuntu, OpenSuse, KaliLinux, Debian y la versión Enterprise de Suse para servidores.

La otra opción es descargar e instalar manualmente. Podéis buscar el paquete appx y descargarlo desde el navegador o podéis serviros de cURL para hacerlo desde el PowerShell con el siguiente comando:

curl.exe -L -o ubuntu-1804.appx https://aka.ms/wsl-ubuntu-1804

En el ejemplo descargaríamos la versión 18.04 de Ubuntu. Tendrías que cambiar la version por la que corresponda.

Una vez descargado tendríamos que desempaquetar e instalar. Desde PowerShell sería así, poniendo las rutas y el nombre de fichero que corresponda:

Expand-Archive ~/Ubuntu.appx ~/Ubuntu

Una vez abierto buscamos el archivo .exe de nuestra distribución, en este caso sería Ubuntu.exe y lo ejecutamos.

Por comodidad se recomienda añadir ese fichero ejecutable al path de Windows, de esta forma podrás invocarlo desde cualquier parte sin tener que escribir toda la ruta.

Un último apunte importante: la distribución de Linux debe estar almacenada en el mismo disco duro donde está instalado el sistema operativo. En caso contrario mostrará un error en la ejecución.

Probando Bat en Ubuntu: una versión «vitaminada» de Cat

Hoy vamos a hablar de Bat, un clon «vitaminado» del comando Cat de Linux.

¿Por qué usar Bat teniendo ya Cat?

Pues porque, como ya he dicho arriba, se trata de un clon «vitaminado» ¿Qué quiere decir esto? Que aunque funciona igual presenta una serie de añadidos que lo hacen más atractivo o funcional:

  • Tiene resaltado de sintaxis para varios lenguajes de programación.
  • Puedes elegir varios temas de colores para dicho resaltado.
  • Incluye integración con Git para ver los cambios en el fichero.
  • Hace el paginado de forma automática.
  • Permite añadir nuevos temas y sintaxis para otros lenguajes no incluidos.

Aquí puedes ver una captura de cómo va lo del resaltado de sintaxis:

Bat sintaxis

Y aquí podéis ver parte de la lista de temas disponibles:

Listado de temas

Para elegir el lenguaje de programación que queremos resaltar basta con invocar el comando seguido de la opción -l y el nombre del lenguaje:

bat -l Python ejemploPython.py

También tenemos la opción de elegir que en lugar de mostrarnos todo el fichero nos muestre solo un rango de líneas:

bat –line-range 5:53 bin/scripts/isaiah/stryper.sh

¿Cómo instalo Bat?

El código está disponible en GitHub, así que tienes la opción de descargarlo desde la página del proyecto. También puedes ejecutar el comando wget desde la consola en Ubuntu:

wget https://github.com/sharkdp/bat/releases/download/v0.8.0/bat_0.8.0_amd64.deb

sudo dpkg -i bat_0.8.0_amd64.deb

O descargarlo desde los repositorios oficiales en Arch-Linux.

sudo pacman -S bat

Comando cmatrix: haciendo un poco el tonto en Linux.

Vamos con una de esas tonterías que a veces publico sobre Linux, que no son muy prácticas pero sí divertidas, como cuando hicimos que la consola nos insultara. Vamos a ver cómo convertir nuestro terminal en la consola de la popular película The Matrix.

Empezamos por instalar cmatrix desde nuestra consola de comandos tal que así:

sudo apt-get update
sudo apt-get install cmatrix

Una vez instalado solo tenemos que invocar el comando cmatrix en la consola para conseguir este bonito efecto:

ejecución cmatrix