Как узнать, какой процесс предотвращает umount?

19

Когда я делаю

sudo umount /media/KINGSTON

Я получил

umount: /media/KINGSTON: device is busy.

Я закрываю все окна и удостоверяюсь, что все оболочки указывают на другие каталоги. Как я могу найти, какой процесс предотвращает umount?

    
задан Guillaume Coté 06.11.2010 в 08:25
источник

4 ответа

18

открыть терминал:

fuser -c /media/KINGSTON

Он выведет что-то вроде этого:

/media/KINGSTON/: 3106c 11086

Это даст вам pid процессов, использующих этот том. Дополнительный персонаж в конце pid даст дополнительную информацию. (c в 3106c)

c - процесс использует файл в качестве текущего рабочего каталога
m - файл сопоставляется с mmap
o - процесс использует его как открытый файл
r - файл является корневым каталогом процесса
t - процесс получает доступ к файлу в виде текстового файла
y - этот файл является управляющим терминалом для процесса

Итак, чтобы размонтировать просто убить эти pids и повторно попробовать отключить

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

Примечание. Чтобы найти точное имя приложения этих pids, вы можете использовать эту команду

cat /proc/<pid>/cmdline

Например: cat /proc/11086/cmdline

это выведет что-то вроде ниже.

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

Надеюсь, это поможет

    
ответ дан aneeshep 06.11.2010 в 09:01
источник
7

Наиболее полезным инструментом является lsof . Он показывает, какие файлы используются в каких процессах. Если /media/KINGSTON - точка монтирования (имя устройства также будет работать), следующая команда показывает все файлы, которые используются в этой точке монтирования:

lsof /media/KINGSTON

Если вы запустите эту команду как обычный пользователь, она будет показывать только ваши собственные процессы¹. Запустите sudo lsof /media/KINGSTON , чтобы просмотреть все процессы пользователей.

Результат из lsof выглядит следующим образом:

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

В столбце COMMAND отображается имя исполняемого файла программы, а столбец PID показывает идентификатор процесса. В столбце NAME указано имя файла; вы можете увидеть (deleted) , если файл был удален во время открытия (когда файл удален, он больше не имеет имени, но он все еще существует до тех пор, пока последний процесс с его закрытием не закроет файл). USER должно быть само собой разумеющимся. Остальные столбцы здесь не важны, кроме, возможно, FD , которая показывает, как файл используется процессом:

  • cwd : текущий рабочий каталог
  • txt : исполняемый файл программы²
  • mem : файл с отображением памяти (здесь, подумайте об этом как открытый файл)
  • число: фактический открытый файл; последующая буква указывает режим открытия, например r для чтения, и w для записи

Нет механического способа найти окно, в котором файл открыт (это на самом деле не имеет технического смысла: если процесс имеет несколько окон, файл не связан конкретно ни с одним окном, ни даже с любым простым способ идентификации окна процесса (и, конечно, процесс не должен иметь никаких окон). Но обычно имя команды и имя файла достаточно, чтобы найти нарушителя и закрыть файл должным образом.

Если вы не можете закрыть файл и просто хотите закончить все это, вы можете убить процесс с помощью kill 31421 (где 31421 - идентификатор процесса) или kill -HUP 31421 («зависание»). Если обычное убийство не делает трюк, убейте его с крайним предрассудком: kill -KILL 31421 .

Существует GUI для lsof, glsof , но пока он еще не готов к прайм-тайму, и он не является для Ubuntu до сих пор.

¹ Lsof может перечислить некоторую информацию о процессах других пользователей, но не обнаруживает точку монтирования, поэтому не будет перечислять их, если вы укажете точку монтирования.
² Исполняемый код часто называют текстом при обсуждении исполняемых форматов.

    
ответ дан Gilles 06.11.2010 в 13:59
2

Также это может помочь:

lsof | grep \/media\/KINGSTON
    
ответ дан Hashem Masoud 06.11.2010 в 09:02
2

Между тем команда фьюзера значительно улучшилась. Вы можете выполнить полную работу с помощью одной команды:

sudo fuser -ickv /"mountpoint"

Где:

  • параметр k убивает процесс нарушения,
  • while v показывает заранее процесс и его пользователя
  • и i запрашивает подтверждение.

Если какой-то процесс сопротивляется, повторите попытку с fuser -ickv -9 (или, чаще всего, с -SIGNAL ), которая убивает самых упрямых.
Но вы всегда найдете какой-то «бессмертный» процесс ...!     

ответ дан prometheos 14.01.2016 в 01:56