我如何找出哪个进程阻止了过载?


26

当我做

sudo umount /media/KINGSTON

我有

umount: /media/KINGSTON: device is busy.

我关闭所有窗口,并确保所有外壳程序都指向其他目录。我如何找到阻止该进程的进程?


3
我认为您在这里输入错误,我怀疑命令是否返回“我如何找出哪个进程正在消耗我的带宽?” ...;)您是否有可能编辑该问题?
8128

Answers:


24

打开一个终端:

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^@

希望这会有所帮助


2
热熔器-ck也会杀死它。
若奥·平托

3
我建议先杀死没有-9选项的应用程序,以使这些应用程序有机会彻底关闭。而且我建议使用ps <pid>而不是在/ proc中编辑文件来查看命令名称和参数。
Marius Gedminas 2010年

我按照您的程序查找过程,这是Thunar-deamon。没有多余的字符可以提供额外的信息。我还没有杀死它,我担心它可能会对其他事物的运行产生影响。
GuillaumeCoté10年

7

最有用的工具是lsof 安装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可以列出有关其他用户的进程的一些信息,但它并没有检测到安装点,所以如果你指定安装点就不一一列举了。
² 在讨论可执行格式时,可执行代码通常称为文本。



2

同时,定影器命令已大大改善。您可以使用单个命令完成全部工作:

$ sudo fuser -ickv /"mountpoint"

哪里:

  • 参数k杀死令人讨厌的过程,
  • 同时v预先显示该过程及其用户
  • i要求您确认。

如果某些进程拒绝了,则尝试使用fuser -ickv -9(或更普遍地使用-SIGNAL)杀死最顽固的进程。
但是您总会发现一些“不朽”的过程……!

在这种情况下,我最近学会了使用

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

作为最后的资源,到目前为止每次都对我有用。


我发现了永生的过程,是我尝试失败的尝试vboxmanage。-_-
sudo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.