howtos/Linux/matar procesos que bloquean...

74 lines
3.1 KiB
Plaintext

Fuser es un comando muy poco conocido pero muy potente en Linux, identifica qué procesos están utilizando un fichero o carpeta determinada o un socket. De la misma forma podemos usarlo para matar esos mismos procesos.
--- La forma más simple de utilizarlo sería así:
m3t4g4m3@nexolinux ~ $ fuser .
/home/m3t4g4m3: 5663c
Cuyo PID nos muestra el proceso que muestra que mi propio usuario está usando ese directorio al encontrarme en él:
m3t4g4m3@nexolinux ~ $ ps -ef | grep 5663
m3t4g4m3 5663 5655 0 13:30 pts/2 00:00:00 -su
La «c» del proceso que muestra también nos aporta información, en este caso es «directorio actual» (Current directory)
También podemos ver esta nomenclatura:
c Directorio actual (current directory)
e Ejecutable activo (executable being run)
f Fichero abierto, omitido en el modo por defecto (open file)
F Fichero abierto para escritura, omitido en el modo por defecto (open file for writing)
r Directorio raíz (root directory)
m Fichero mapeado o biblioteca compartida (maped file or shared library)
--- Si ejecutamos fuser sobre un ejecutable como el servidor web nginx tenemos esto:
nexolinux sbin # fuser -v nginx
USER PID ACCESS COMMAND
/usr/sbin/nginx: root 6444 ...e. nginx
www-data 6445 ...e. nginx
www-data 6446 ...e. nginx
www-data 6447 ...e. nginx
www-data 6448 ...e. nginx
--- Si lo ejecutamos sobre un socket
nos dará esta valiosa información. Como por ejemplo en el puerto 80 que arranca el nginx
nexolinux sbin # fuser -v -n tcp 80
USER PID ACCESS COMMAND
80/tcp: root 6444 F.... nginx
www-data 6445 F.... nginx
www-data 6446 F.... nginx
www-data 6447 F.... nginx
www-data 6448 F.... nginx
--- Matar procesos que de un software determinado:
nexolinux sbin # ps -ef | grep nginx | grep -v grep
root 7112 1 0 14:21 ? 00:00:00 nginx: master process ./nginx
www-data 7113 7112 0 14:21 ? 00:00:00 nginx: worker process
www-data 7114 7112 0 14:21 ? 00:00:00 nginx: worker process
www-data 7115 7112 0 14:21 ? 00:00:00 nginx: worker process
www-data 7116 7112 0 14:21 ? 00:00:00 nginx: worker process
nexolinux sbin # fuser -v -k nginx
USER PID ACCESS COMMAND
/usr/sbin/nginx: root 7112 ...e. nginx
www-data 7113 ...e. nginx
www-data 7114 ...e. nginx
www-data 7115 ...e. nginx
www-data 7116 ...e. nginx
nexolinux sbin # ps -ef | grep nginx | grep -v grep
nexolinux sbin #
5- Matar procesos selectivos de forma interactiva.
Pero imaginemos por un momento que una carpeta o binario donde vamos a ejecutarlo pueda ser usado por muchas aplicaciones o directamente lo desconozcamos, como medida de cautela, usamos el argumento «-i» para que nos pregunte si queremos o no matar un proceso determinado:
nexolinux sbin # fuser -v -i -k nginx
USER PID ACCESS COMMAND
/usr/sbin/nginx: root 7291 ...e. nginx
www-data 7292 ...e. nginx
www-data 7293 ...e. nginx
www-data 7294 ...e. nginx
www-data 7295 ...e. nginx
Kill process 7291 ? (y/N) y
Kill process 7292 ? (y/N) y
Kill process 7293 ? (y/N) y
Kill process 7294 ? (y/N) y
Kill process 7295 ? (y/N)