Когда я делаю
sudo umount /media/KINGSTON
я получил
umount: /media/KINGSTON: device is busy.
Я закрываю все окна и проверяю, чтобы все оболочки указывали на другие каталоги. Как я могу найти, какой процесс предотвращает размонтирование?
Когда я делаю
sudo umount /media/KINGSTON
я получил
umount: /media/KINGSTON: device is busy.
Я закрываю все окна и проверяю, чтобы все оболочки указывали на другие каталоги. Как я могу найти, какой процесс предотвращает размонтирование?
Ответы:
открыть терминал:
fuser -c /media/KINGSTON
Это выведет что-то вроде этого:
/media/KINGSTON/: 3106c 11086
Это даст вам pid процессов, использующих этот том. Дополнительный символ в конце pid даст дополнительную информацию. (c в 3106c)
c - процесс использует файл в качестве текущего рабочего каталога
m - файл отображается с помощью mmap
o - процесс использует его в качестве открытого файла
r - файл является корневым каталогом процесса
t - процесс обращается к файл как текстовый файл
у - этот файл является управляющим терминалом для процесса
Так что для размонтирования просто убейте эти пиды и попробуйте снова размонтировать
sudo kill -9 3106 11086
sudo umount /media/KINGSTON
Примечание: чтобы узнать точное имя приложения этих пидов, вы можете использовать эту команду
cat /proc/<pid>/cmdline
Например : cat /proc/11086/cmdline
это выведет что-то вроде ниже.
evince^@/media/KINGSTON/Ubuntu-guide.pdf^@
Надеюсь, это поможет
ps <pid>
вместо редактирования файлов в / proc, чтобы увидеть имя команды и аргументы.
Самый полезный инструмент - это 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
.
Есть графический интерфейс для lsof, glsof , но он еще не совсем готов к прайм- тайму и пока не упакован для Ubuntu.
¹
Lsof может перечислить некоторую информацию о процессах других пользователей, но он не обнаруживает точку монтирования поэтому не буду их перечислять , если указать точку монтирования.
²
Исполняемый код часто называют текстом в обсуждениях исполняемых форматов.
Также это может помочь:
lsof | grep \/media\/KINGSTON
grep "media/KINGSTON"
Между тем, команда fuser значительно улучшилась. Вы можете сделать всю работу с помощью одной команды:
$ sudo fuser -ickv /"mountpoint"
Где:
k
убивает оскорбительный процесс,v
заранее показывает процесс и его пользователяi
просит вас подтвердить. Если какой-то процесс сопротивляется, попробуйте еще раз с fuser -ickv -9
(или, в более общем смысле, с -SIGNAL
), который убивает самых упрямых.
Но вы всегда найдете какой-нибудь «бессмертный» процесс ...!
В этих случаях я недавно научился использовать
$ sudo umount --lazy --force <mountpoint>
последний ресурс, который до сих пор работал на меня каждый раз.
vboxmanage
. -_-