【问题标题】:How find out which process is using a file in Linux?如何找出Linux中哪个进程正在使用文件?
【发布时间】:2014-07-03 13:10:35
【问题描述】:

我尝试在 Linux 中使用 rm -rf file_name 删除文件,但收到错误:

rm: file_name not removed.  Text file busy

我怎样才能知道哪个进程正在使用这个文件?

【问题讨论】:

    标签: linux ps


    【解决方案1】:

    你可以使用fuser命令,比如:

    fuser file_name
    

    您将收到使用该文件的进程列表。

    您可以使用不同的标志,以获得更详细的输出。

    您可以在fuser's Wikipedia articleman 页面中找到更多信息。

    【讨论】:

    • 我试过这个:fuser -i /home/bin/lib.但是得到了这个: fuser: 非法选项 -- i /home/bin/lib: 27674t
    • @khris,可能不是所有的fuser 实现都是相同的,或者工作方式相同。即使-i 是在 POSIX 中定义的,您使用的特定实现也不一定具有与 Wikipedia 文章中描述的选项相同的选项。比如我现在用的是AIX,这个系统中可用的fuser也没有-i选项。
    • 由于某种原因,fuserlsof 都没有在 virtualbox 客户机上为我工作。 This answer救了我。
    【解决方案2】:

    @jim 的回答是正确的——fuser 就是你想要的。

    另外(或替代地),您可以使用lsof 获取更多信息,包括用户名,以防您需要权限(无需运行其他命令)来终止进程。 (当然,如果您想要终止进程,fuser 可以使用其 -k 选项来执行此操作。您可以让 fuser 使用带有 -s 选项的其他信号——查看手册页了解详细信息.)

    例如,tail -F /etc/passwd 在一个窗口中运行:

    ghoti@pc:~$ lsof | grep passwd
    tail      12470    ghoti    3r      REG  251,0     2037 51515911 /etc/passwd
    

    请注意,您还可以使用lsof 找出哪些进程正在使用特定的套接字。一个很好的工具,可以放在你的武器库中。

    【讨论】:

    • PID 是哪个字段?
    • @nmz787 - lsof | head -1 查看所有标题。
    • @nmz787 第二个字段是PID。
    • lsof | grep -E "PID|<your_process_name>" 显示第一行和您要查询的进程。
    【解决方案3】:

    对于没有 fuser 的用户:

    虽然我们可以使用 lsof,但还有另一种方法,即我们可以查询 /proc 文件系统本身,该文件系统列出了所有进程打开的所有文件。

    # ls -l /proc/*/fd/* | grep filename
    

    下面的示例输出:

    l-wx------。 1 根 64 Aug 15 02:56 /proc/5026/fd/4 -> /var/log/filename.log

    从输出中,可以使用 ps 等实用程序中的进程 ID 来查找程序名称

    【讨论】:

      【解决方案4】:
      $ lsof | tree MyFold
      

      如附图所示:

      【讨论】:

      • 这是如何工作的? tree 是否从标准输入读取任何内容?如果是,它对那个输入有什么作用?
      • man lsof - 显示命令 lsof 的手册,lsof - 列出打开的文件,在其标准输出文件中列出有关进程打开的文件的信息,结果可以在树形结构中看到。你应该清楚地检查什么是lsof
      • 我的问题是关于tree,而不是lsof。据我了解,tree 不会从标准输入读取,因此当您运行lsof | tree ... 时,lsof 的输出会丢弃。如果正确,那么lsof | tree MyFoldtree MyFold 相同,只是显示内容,而不是某个进程打开了哪些文件。
      猜你喜欢
      • 2013-03-08
      • 2014-09-09
      • 2010-10-01
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 2012-04-16
      • 2013-06-04
      相关资源
      最近更新 更多