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

26

Cuando lo hago

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 impide el desmontaje?

Guillaume Coté
fuente
3
Creo que tiene un error tipográfico aquí, dudo que el comando haya devuelto "¿Cómo puedo saber qué proceso está consumiendo mi ancho de banda?" ...;) ¿hay alguna posibilidad de que pueda editar la pregunta por favor?
8128

Respuestas:

24

abrir una terminal:

fuser -c /media/KINGSTON

Producirá algo como esto:

/media/KINGSTON/: 3106c 11086

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

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

Entonces, para desmontar, simplemente mata esos pids y vuelve a intentarlo

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 generará algo como a continuación.

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

Espero que esto ayude

aneeshep
fuente
2
fuser -ck también lo mataría.
João Pinto
3
Sugeriría matarlos sin la opción -9 primero, para dar a esas aplicaciones la oportunidad de cerrar limpiamente. Y sugeriría usar en ps <pid>lugar de editar archivos en / proc para ver el nombre del comando y los argumentos.
Marius Gedminas
Sigo tu procedimiento para encontrar el proceso, es Thunar - deamon. No hay personajes adicionales que brinden información adicional. Todavía no lo he matado, me preocupa el impacto que podría tener en otra cosa en ejecución.
Guillaume Coté
7

La herramienta más útil es lsof Instalar lsof . Muestra qué archivos están siendo utilizados por qué procesos. Si /media/KINGSTONes 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/KINGSTONpara ver todos los procesos de los usuarios.

El resultado de se lsofve 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 COMMANDcolumna muestra el nombre del ejecutable del programa y la PIDcolumna muestra el ID del proceso. La NAMEcolumna 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 aún existe hasta que el último proceso que lo usa cierra el archivo). USERdebe explicarse por sí mismo. Las otras columnas no importan aquí, excepto quizás FD, que muestra cómo el proceso usa el archivo:

  • cwd: directorio de trabajo actual
  • txt: el programa ejecutable²
  • mem: un archivo mapeado 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 rleer y wescribir

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 con una forma simple 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 localizar al infractor y cerrar el archivo correctamente.

Si no puede cerrar el archivo y solo desea finalizarlo todo, puede eliminar el proceso con kill 31421(dónde 31421está la ID del proceso) o kill -HUP 31421("colgar"). Si matar normal no hace el truco, matar con extremo prejuicio: kill -KILL 31421.

Hay una GUI para lsof, glsof , pero aún no está lista para el horario de máxima audiencia, y hasta ahora no está empaquetada para Ubuntu.

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

Gilles 'SO- deja de ser malvado'
fuente
2

También esto puede ayudar:

lsof | grep \/media\/KINGSTON
Hashem Masoud
fuente
44
No hay necesidad de escapar de los cortes.
Marius Gedminas el
Cuando no estés seguro, busca comillas, por ejemplogrep "media/KINGSTON"
Adam Matan, el
2

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

$ sudo fuser -ickv /"mountpoint"

Dónde:

  • parámetro kmata el proceso ofensivo,
  • mientras vmuestra de antemano el proceso y su usuario
  • y ite pide confirmación.

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

En estos casos, últimamente aprendí a usar

$ sudo umount --lazy --force <mountpoint>

como último recurso, hasta ahora me funcionó siempre.

prometheos
fuente
Encontré el proceso inmortal, mi intento fallido de usar vboxmanage. -_-
sudo