AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 11713
Accepted
Guillaume Coté
Guillaume Coté
Asked: 2010-11-06 23:25:13 +0800 CST2010-11-06 23:25:13 +0800 CST 2010-11-06 23:25:13 +0800 CST

如何找出阻止卸载的进程?

  • 772

当我做

sudo umount /media/KINGSTON

我有

umount: /media/KINGSTON: device is busy.

我关闭所有窗口并确保所有 shell 都指向其他目录。如何找到阻止卸载的进程?

umount
  • 4 4 个回答
  • 36567 Views

4 个回答

  • Voted
  1. Best Answer
    aneeshep
    2010-11-07T00:01:08+08:002010-11-07T00:01:08+08:00

    打开终端:

    fuser -c /media/KINGSTON
    

    它将输出如下内容:

    /media/KINGSTON/: 3106c 11086
    

    这将为您提供使用此卷的进程的 pid。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^@
    

    希望这会有所帮助

    • 34
  2. Gilles 'SO- stop being evil'
    2010-11-07T04:59:23+08:002010-11-07T04:59:23+08:00

    最有用的工具是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:一个内存映射文件(在这里,将其视为一个打开的文件)
    • a number:实际打开的文件;后面的字母表示打开模式,例如r用于阅读和w用于书写

    没有机械的方法来定位打开文件的窗口(这实际上在技术上没有意义:如果一个进程有多个窗口,则一个文件与一个或另一个窗口没有特别的关联),甚至没有任何简单的识别方法进程的窗口(当然,进程不必有任何窗口)。但通常命令名和文件名就足以找到罪犯并正确关闭文件。

    如果您无法关闭文件而只想结束它,您可以使用kill 31421(进程 ID 在哪里31421)或kill -HUP 31421(“挂断”)终止进程。如果简单的杀戮不起作用,那么就带着极端的偏见去杀戮吧:kill -KILL 31421。

    lsof, glsof有一个 GUI ,但它还没有为黄金时段做好准备,而且到目前为止还没有为 Ubuntu 打包。

    ¹ Lsof 可以列出有关其他用户进程的一些信息,但它不会检测到挂载点,因此如果您指定了挂载点,则不会列出它们。
    ² 可执行代码在讨论可执行格式时通常被称为文本。

    • 8
  3. prometheos
    2016-01-14T16:56:17+08:002016-01-14T16:56:17+08:00

    同时 fuser 命令也有了很大的改进。您可以使用单个命令完成全部工作:

    $ sudo fuser -ickv /"mountpoint"
    

    在哪里:

    • 参数k杀死有问题的进程,
    • whilev提前显示过程及其用户
    • 并i要求您确认。

    如果某些进程抵抗,然后再试一次fuser -ickv -9(或更一般地用-SIGNAL)杀死最顽固的进程。
    但你总会找到一些“不朽”的过程……!

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

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

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

    • 6
  4. Hashem Masoud
    2010-11-07T00:02:49+08:002010-11-07T00:02:49+08:00

    这也可以帮助:

    lsof | grep \/media\/KINGSTON
    
    • 2

相关问题

  • 挂载点目录中的预先存在的文件是否安全且不受影响?

  • 一次卸载多个分区

  • 磁盘工具:“卸载”和“安全删除”有什么区别?

  • 为什么我需要 root 权限才能在命令行中卸载驱动器,而不是在 Nautilus 中?如何改变它?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何安装 .run 文件?

    • 7 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    如何获得 CPU 温度?

    • 21 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Marko Smith

    你如何重新启动Apache?

    • 13 个回答
  • Marko Smith

    如何卸载软件?

    • 11 个回答
  • Marko Smith

    如何删除 PPA?

    • 26 个回答
  • Martin Hope
    NES 如何启用或禁用服务? 2010-12-30 13:03:32 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    Olivier Lalonde 如何在结束 ssh 会话后保持进程运行? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B 如何使用命令行将用户添加为新的 sudoer? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans 如何删除旧内核版本以清理启动菜单? 2010-08-21 19:37:01 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve