¿Cómo puedo saber qué proceso está impidiendo un desmontaje?

22

Cuando lo haga

sudo umount /media/KINGSTON

Tengo

umount: /media/KINGSTON: device is busy.

Cierro todas las ventanas y me aseguro de que todos los shell estén apuntando a otros directorios. ¿Cómo puedo encontrar qué proceso está impidiendo el desmontaje?

    
pregunta Guillaume Coté 06.11.2010 - 07:25

4 respuestas

21

abre un terminal:

fuser -c /media/KINGSTON

Se mostrará algo como esto:

/media/KINGSTON/: 3106c 11086

Esto le dará el pid de los procesos que usan este volumen. El carácter adicional al final de pid le dará alguna información adicional. (c en 3106c)

c: el proceso está utilizando el archivo como su directorio de trabajo actual
m: el archivo se asigna con mmap
o - el proceso lo está utilizando como un archivo abierto
r - el archivo es el directorio raíz del proceso
t: el proceso está accediendo al archivo como un archivo de texto
y: este archivo es el terminal de control para el proceso

Así que para desmontar, simplemente elimine los pids y vuelva a intentar desmontar

sudo kill -9 3106 11086
sudo umount /media/KINGSTON

Nota: para encontrar el nombre exacto de la aplicación de estos pids, puede usar este comando

cat /proc/<pid>/cmdline

Por ejemplo: cat /proc/11086/cmdline

esto producirá algo como abajo.

    evince^@/media/KINGSTON/Ubuntu-guide.pdf^@

Espero que esto ayude

    
respondido por el aneeshep 06.11.2010 - 08:01
7

La herramienta más útil es lsof . Muestra qué archivos son usados por qué procesos. Si /media/KINGSTON es un punto de montaje (el nombre del dispositivo también funcionaría), el siguiente comando muestra todos los archivos que están en uso en este punto de montaje:

lsof /media/KINGSTON

Si ejecuta este comando como un usuario normal, solo mostrará sus propios procesos¹. Ejecute sudo lsof /media/KINGSTON para ver los procesos de todos los usuarios.

La salida de lsof se ve así:

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
zsh4    31421 gilles  cwd    DIR    8,1     4096 130498 /var/tmp
zsh4    31421 gilles  txt    REG    8,1   550804 821292 /bin/zsh4
zsh4    31421 gilles  mem    REG    8,1    55176 821326 /usr/lib/zsh/4.3.10/zsh/complist.so
zsh4    31421 gilles   12r   REG    8,1   175224 822276 /usr/share/zsh/functions/Completion.zwc

La columna COMMAND muestra el nombre del ejecutable del programa y la columna PID muestra la ID del proceso. La columna NAME muestra el nombre del archivo; es posible que vea (deleted) si el archivo se eliminó mientras estaba abierto (cuando se elimina un archivo, ya no tiene un nombre, pero sigue existiendo hasta que el último proceso que lo usa cierra el archivo). USER debería explicarse por sí mismo. Las otras columnas no importan aquí, excepto quizás FD , que muestra cómo el proceso utiliza el archivo:

  • cwd : directorio de trabajo actual
  • txt : el programa ejecutable²
  • mem : un archivo asignado en memoria (aquí, piense en él como un archivo abierto)
  • un número: un archivo abierto real; una letra posterior indica el modo de apertura, como r para leer y w para escribir

No hay una forma mecánica de ubicar la ventana donde está abierto un archivo (de hecho, esto no es técnicamente significativo: si un proceso tiene varias ventanas, un archivo no está particularmente asociado con una ventana u otra), ni siquiera un simple forma de identificar la ventana de un proceso (y, por supuesto, un proceso no tiene que tener ninguna ventana). Pero, por lo general, el nombre del comando y el nombre del archivo son suficientes para ubicar al infractor y cerrar el archivo correctamente.

Si no puede cerrar el archivo y solo quiere finalizarlo todo, puede cancelar el proceso con kill 31421 (donde 31421 es el ID del proceso) o kill -HUP 31421 ("colgar"). Si la simple matanza no funciona, mata con un prejuicio extremo: kill -KILL 31421 .

Hay una GUI para lsof, glsof , pero aún no está lista para el horario estelar, y no lo está empaquetado para Ubuntu hasta ahora.

¹ Lsof puede mostrar información sobre los procesos de otros usuarios, pero no detecta el punto de montaje, por lo que no los incluirá si especifica un punto de montaje.
² El código ejecutable a menudo se denomina texto en discusiones de formatos ejecutables.

    
respondido por el Gilles 06.11.2010 - 12:59
2

También esto puede ayudar:

lsof | grep \/media\/KINGSTON
    
respondido por el Hashem Masoud 06.11.2010 - 08:02
2

Mientras tanto, el comando del fusor ha mejorado mucho. Puede hacer el trabajo completo con un solo comando:

sudo fuser -ickv /"mountpoint"

Donde:

  • el parámetro k mata el proceso ofensivo,
  • mientras v muestra por adelantado el proceso y su usuario
  • y i te piden confirmación.

Si algún proceso se resiste, intente nuevamente con fuser -ickv -9 (o más generalmente con -SIGNAL ) que mata a los más tercos.
¡Pero siempre encontrarás algún proceso "inmortal" ...!

    
respondido por el prometheos 14.01.2016 - 00:56

Lea otras preguntas en las etiquetas