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

Nginx en Debian: los comandos más básicos

Vamos a darle un ojo a los comandos más básicos del servidor Nginx para sistemas operativos Debian:

Arrancar Nginx:

Para iniciar Nginx puede ser uno de estos dos comandos, dependiendo de si el gestor de servicios es systemd o sysvinit:

$ sudo systemctl start nginx #systemd
$ sudo service nginx start   #sysvinit

Reiniciar Nginx:

En caso de que necesites reiniciar Nginx sería alguno de estos dos

$ sudo systemctl restart nginx #systemd
$ sudo service nginx restart   #sysvinit

Parar Nginx:

Para detener Nginx:

$ sudo systemctl stop nginx #systemd
$ sudo service nginx stop   #sysvinit

Habilitar arranque en el inicio:

Si queremos que Nginx arranque automáticamente al iniciar el sistema operativo entonces hay que utilizar este:

$ sudo systemctl enable nginx #systemd
$ sudo service nginx enable   #sysvinit

Comprobar la configuración:

Si has hecho cambios en la configuración de Nginx este comando te dirá si la configuración es correcta:

$ sudo nginx -t

Comprobar la velocidad de conexión desde línea de comandos en Linux.

Hay múltiples webs que nos permiten ejecutar tests de velocidad, pero a veces estamos administrando un servidor sin entorno gráfico y resulta útil poder lanzar un comando que nos de el resultado. Con la siguiente línea puedes hacerlo sin tener que instalar nada:

curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python -

Os dejo una captura del resultado desde casa de mis padres.

Teste de velocidad comandos

Linux: conocer el modelo de tarjeta gráfica y el driver mediante una consulta por línea de comandos

Ayer veíamos la forma de hacerlo en Windows, hoy vamos en Linux ¿Cómo sacamos por línea de comandos el modelo de tarjeta gráfica y el driver? Aquí hay varias opciones:

Tenemos un comando que nos saca todos los dispositivos del sistema con datos del fabricante:

lspci -nn

Esto nos deja una salida muy sucia, demasiados datos, pero podemos filtrar con grep:

lspci -k | grep -EA3 'VGA|3D|Display'

Otra opción es instalar Inxi , un software específico para chequeo de hardware,y ejecutarlo:

#instalamos
sudo apt install inxi
#ejecutamos
inxi -Gx

Entonces ¿para el driver?

#Para ver el del kernel
find /dev -group video
#Paraver el que está en uso
glxinfo | grep -i vendor

Diferentes formas de contar el número de líneas de un fichero desde la consola de Linux.

Si queremos contar el número de líneas que tiene un fichero desde la consola de Linux tenemos, al menos, cuatro métodos para conseguirlo. Os pongo los ejemplos de código:

Usando los comandos cat y wc:

cat fichero | wc -l

Con grep le podemos decir que cuente todo el documento de esta forma:

grep -c '.*' file

La opción -n de sed junto al operador = también nos hace el servicio:

sed -n '$=' file

Y para terminar vamos a ver cómo hacerlo con awk:

awk 'END {print NR}' file

Instalar y ejecutar Windows 95 como aplicación en Ubuntu/Debian.

Ejecutar Windows 95 dentro de un sistema Linux no es algo tan novedoso, a fin de cuentas con máquinas virtuales de Virtual Box o QEmu ya era posible desde hace años. Pero ahora Felix Rieseberg ha convertido el popular sistema operativo de Microsoft en una aplicación basada en el framework Electron.

El propio autor en su página de Github recomienda una virtualización para correr aplicaciones en lugar de su versión, que ha sido creada más con fines educativos que comerciales.

Para instalar el programa los comandos serían los siguientes:

#Descargamos el fichero
curl -O https://github.com/felixrieseberg/windows95/releases/download/v1.2.0/windows95-linux_1.2.0_amd64.deb
#desempaquetamos
sudo dpkg -i windows95-linux_1.2.0_amd64.deb
#Por si las dependencias
sudo apt install -f

Windows as an app

Una curiosidad que alegrará durante un rato a los nostálgicos que sufrimos este sistema operativo que se colgaba cada dos por tres pero que, a su vez, fue el primer Windows que tenía la barra de tareas y el botón de Inicio, convirtiéndose en modelo a imitar por muchos entornos gráficos posteriores.

Usar cURL en Linux para descargar un fichero.

Recordaréis que hace tiempo ya hablamos aquí sobre cURL, un proyecto creado por el sueco Daniel Stenberg a mediados de los 90 para crear un bot de IRC que calculaba el cambio de importes entre dólares y coronas.

La mayoría de distribuciones de Linux nos ofrecen un comando cURL con muchas utiliades, hoy vamos a ver cómo descargar un fichero desde un servidor: Para ello nos serviremos de las opciones -O u -o.

La primera guardará el fichero en el directorio en el que estemos posicionados con el mismo nombre que tiene en la localización remota, mientras que el segundo nos permitirá especificar el nombre y la ruta del fichero:

#Sin Cambiar nombre
curl -O http://dominio.com/fichero.tar.gz
#Cambiando nombre
curl -o nuevonombre.tar.gz http://dominio.com/fichero.tar.gz

Instalar Adobe Brackets en Ubuntu/Debian

No hace mucho hablábamos de Visual Studio Code y hoy vamos a ver otro editor: Adobe Brackets.

Adobe Brackets es un editor de texto para desarrollo web, creado por Adobe Systems. Se ha liberado bajo licencia MIT y el código puede ser revisado y descargado en GitHub.

Adobe Brackets

Cuenta con funciones interesantes como la posibilidad de editar ficheros en remoto, atajos de teclado para abrir el editor de CSS cuando seleccionamos una clase o id en el código, un selector de color o la posibilidad de vista previa en vivo.

Para descargarlo basta con acceder al sitio de descargas desde Github desde el que nos podemos descargar el paquete .deb (existen también empaquetado en formato .msi para usuarios de Windows o en .dmg para usuarios de MacOS X, el editor es multiplataforma). Una vez bajado podemos instalarlo mediante el gestor de paquetes o desde línea de comandos tal que así:

#Ejemplo para la versión 1.13 de 64 bits
#Si cambia la versión hay que cambiar el comando
sudo dpkg -i Brackets.Release.1.13.64-bit.deb

En caso de problemas con las dependencias bastaría con ejecutar:

sudo apt -f install