解决方案:

假设要找出所有使用 /mnt 的进程

# fuser -uvm /mnt
                     USER        PID ACCESS COMMAND
/mnt:                root       7899 ..c.. (root)bash

或者你也可以使用

# lsof /mnt
COMMAND  PID USER   FD   TYPE DEVICE SIZE   NODE NAME
bash    7899 root  cwd    DIR   0,18 4096 535032 /mnt (192.168.1.11:/work)

如果要终止所有使用 /mnt的进程,请运行以下命令

# fuser -km /mnt
/mnt:                 7899c

重新检查

# fuser -uvm /mnt

现在没有进程占用/mnt目录了,我们可以安全的卸载它。

搜索占用文件系统的已被删除的进程

还有一些进程已被删除,但文件仍然被锁定的情况,除非它们的父进程或者与该进程相关的应用程序被完全终止。
要查看这些文件,我们可能需要使用如下所示的另外参数

# lsof +aL1 /var
COMMAND PID USER FD TYPE DEVICE SIZE NLINK NODE NAME
rhn_check 31261 root 8u REG 253,2 22082560 0 327733 /var/cache/yum/prod-03-epel-x86_64-server-5-rhel5/primary.xml.gz.sqlite (deleted)
rhn_check 31261 root 9u REG 253,2 78848 0 327737 /var/cache/yum/prod-03-likewise-x86_64-client-5-rhel5/primary.xml.gz.sqlite (deleted)
rhn_check 31261 root 10u REG 253,2 144384 0 327741 /var/cache/yum/prod-03-mssb-x86_64-server-5/primary.xml.gz.sqlite (deleted)
rhn_check 31261 root 11u REG 253,2 54056960 0 327748 /var/cache/yum/prod-03-rhel-x86_64-server-5/primary.xml.gz.sqlite (deleted)
rhn_check 31261 root 12u REG 253,2 9275392 0 327752 /var/cache/yum/prod-03-rhel-x86_64-server-supplementary-5/primary.xml.gz.sqlite (deleted)
rhn_check 31261 root 13u REG 253,2 582656 0 327756 /var/cache/yum/prod-03-rhn-tools-rhel-x86_64-server-5-rhel5/primary.xml.gz.sqlite (deleted)

说明:

当 +L 后跟一个数字时,只会列出链接数小于该数字的文件。
(-L 后面不能有数字。
)+L1 形式的规范将选择已取消链接的打开文件。
+aL1 <file_system> 形式的规范将选择指定文件系统上未链接的打开文件。

deleted 表示这些文件已被删除,但进程还引用未关闭。

如何在Linux中查找访问文件的所有进程

有时,即使没有人访问共享,我们也无法卸载共享。
我们可能会遇到的错误是

Device busy
Mount Point busy
Text File is busy

在这些情况下,我们需要找出所有仍在访问文件的进程。
可以使用 lsof 或者 fuser 命令找出这些进程。

日期:2020-06-02 22:18:31 来源:oir作者:oir