当我做一个
du -h --max-depth=1
在我的服务器中出现以下错误,
du: cannot access `./proc/13379/task/13379/fd/4': No such file or directory
du: cannot access `./proc/13379/task/13379/fdinfo/4': No such file or directory
du: cannot access `./proc/13379/fd/4': No such file or directory
du: cannot access `./proc/13379/fdinfo/4': No such file or directory
如果我做
rm -rf /proc/13379/*
删除文件夹时它会不断以不同的 pid 返回。
我如何知道哪个进程正在使用这个以及这些文件链接存在什么问题?
答案1
实际上,“/proc/”文件夹用于保存进程信息并将其本身链接到 irq、文件描述符和其他内核源(预计会看到循环链接并依赖于进程本身的操作)。
因此,当进程正在运行时无法删除,因为进程占用了此文件夹上的资源。此外,PID 在“/proc/{PID}”上表示,因此您无需使用任何命令(如 lsof)来查找使用该文件链接的进程。在上述情况下,“13379”是您要查找的进程 ID。
答案2
如上所述,/proc 是机器上运行的进程的管理信息。它是一个虚拟文件系统,不占用任何磁盘空间,只包含由内核生成或由内核读取的符号链接和“文件”(其中一些是可写的)。
但是,这些错误消息完全无害。发生的事情是,du
收集了 /proc 中的目录列表(即进程 ID),当它试图进入目录时,甚至在目录内部时,进程就会退出,其对应的目录也会消失。这让人感到困惑du
。
为了避免此类错误,您可以用 跳过 /proc --ecxlude=/proc
,或使用其他选项,如--one-file-system
或--exclude-from=FIlE
这样,您还可以跳过 /dev、/sys 等。