当我做
sudo umount /media/KINGSTON
我有
umount: /media/KINGSTON: device is busy.
我关闭所有窗口,并确保所有外壳程序都指向其他目录。我如何找到阻止该进程的进程?
当我做
sudo umount /media/KINGSTON
我有
umount: /media/KINGSTON: device is busy.
我关闭所有窗口,并确保所有外壳程序都指向其他目录。我如何找到阻止该进程的进程?
Answers:
打开一个终端:
fuser -c /media/KINGSTON
它将输出如下内容:
/media/KINGSTON/: 3106c 11086
这将为您提供使用此卷的过程的提示。pid末尾的额外字符将提供一些额外信息。(3106c中的c)
c-进程正在使用文件作为其当前工作目录
m-文件已通过mmap映射
o-进程正在将其用作打开文件
r-文件是进程的根目录
t-进程正在访问文件作为文本文件
y-此文件是过程的控制终端
因此,要卸载,只需杀死该pid,然后重试卸载即可
sudo kill -9 3106 11086
sudo umount /media/KINGSTON
注意:要查找这些pid的确切应用程序名称,可以使用此命令
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
列显示进程ID。该NAME
列显示文件名;您可能会看到(deleted)
打开时是否删除了该文件(删除文件后,该文件不再具有名称,但在使用该文件的最后一个进程关闭该文件之前,该文件仍然存在)。USER
应该不言自明。除了也许FD
,其他列在这里都无关紧要,它显示了进程如何使用文件:
cwd
:当前工作目录txt
:程序可执行文件²mem
:一个内存映射文件(在这里,将其视为打开的文件)r
用于阅读和w
用于写作没有机械的方法来定位打开文件的窗口(实际上这在技术上没有意义:如果一个进程有多个窗口,则文件并没有特别地与一个窗口或另一个窗口相关联),甚至没有任何简单的识别方法进程的窗口(当然,进程不必具有任何窗口)。但是通常命令名和文件名足以找到违规者并正确关闭文件。
如果您无法关闭文件而只想结束所有操作,则可以使用kill 31421
(其中31421
的进程ID)或kill -HUP 31421
(“挂断”)杀死该进程。如果单纯的杀戮无法解决问题,请以极端偏见进行杀戮:kill -KILL 31421
。
有一个用于lsof,glsof的GUI ,但是还没有准备好迎接黄金时段,并且到目前为止还没有为Ubuntu打包。
¹
LSOF可以列出有关其他用户的进程的一些信息,但它并没有检测到安装点,所以如果你指定安装点就不一一列举了。
²
在讨论可执行格式时,可执行代码通常称为文本。
这也可以帮助:
lsof | grep \/media\/KINGSTON
grep "media/KINGSTON"
同时,定影器命令已大大改善。您可以使用单个命令完成全部工作:
$ sudo fuser -ickv /"mountpoint"
哪里:
k
杀死令人讨厌的过程,v
预先显示该过程及其用户i
要求您确认。 如果某些进程拒绝了,则尝试使用fuser -ickv -9
(或更普遍地使用-SIGNAL
)杀死最顽固的进程。
但是您总会发现一些“不朽”的过程……!
在这种情况下,我最近学会了使用
$ sudo umount --lazy --force <mountpoint>
作为最后的资源,到目前为止每次都对我有用。
vboxmanage
。-_-