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
    • 最新
    • 标签
主页 / unix / 问题 / 431986
Accepted
sourcejedi
sourcejedi
Asked: 2018-03-19 15:44:24 +0800 CST2018-03-19 15:44:24 +0800 CST 2018-03-19 15:44:24 +0800 CST

`lsof` 的 FD 列在某些情况下显示 DEL,而不是 FD 编号

  • 772
  1. 这是什么意思?
  2. 如何lsof找到这样的FD?即与普通 FD 相比,可以很容易地找到ls -l /proc/$PID/fd/$FD.

$ lsof -p $(pgrep pulseaudio) | head -n1
COMMAND     PID       USER   FD      TYPE             DEVICE  SIZE/OFF    NODE NAME

$ lsof -p $(pgrep pulseaudio) | grep DEL
pulseaudi 25911 alan-sysop  DEL       REG                0,5           2334404 /memfd:pulseaudio
pulseaudi 25911 alan-sysop  DEL       REG                0,5           2340448 /memfd:pulseaudio
pulseaudi 25911 alan-sysop  DEL       REG                0,5           2335426 /memfd:pulseaudio
pulseaudi 25911 alan-sysop  DEL       REG                0,5           2340018 /memfd:pulseaudio
pulseaudi 25911 alan-sysop  DEL       REG                0,5           2340021 /memfd:pulseaudio
pulseaudi 25911 alan-sysop  DEL       REG                0,5           2334322 /memfd:pulseaudio
pulseaudi 25911 alan-sysop  DEL       REG                0,5           2336421 /memfd:pulseaudio

man lsof仅记录列的DEL值TYPE,而不是FD列。

lsof
  • 1 1 个回答
  • 2703 Views

1 个回答

  • Voted
  1. Best Answer
    sourcejedi
    2018-03-19T15:48:21+08:002018-03-19T15:48:21+08:00

    lsof通常报告来自 Linux/proc/<PID>/maps文件的mem条目类型FD 列。但是,当进程文件lsof中找不到路径并且文件条目包含时,表明文件在打开后被删除,报告文件为。stat(2)mapsmaps(deleted)lsofDEL

    https://stackoverflow.com/a/37160579/1601027,正如@don_crissti 指出的那样。


    lsof即使以 root 身份运行,也无法显示这些文件的大小。(我lsof的是 4.89 版)。

    但是,如果您同时拥有足够新的内核和root访问权限,那么您既可以在 中查看映射ls -l /proc/$PID/map_files/,也可以stat --dereference在单个文件上运行以显示它们的大小。这可用于检查“已删除”映射文件使用的资源。特别是memfds,它永远不会出现在文件系统中,并且始终被视为(deleted)文件。

    $ ls -l /proc/$(pgrep pulseaudio)/map_files | head
    total 0
    lr--------. 1 alan-sysop alan-sysop 64 Mar 18 23:50 562004ac5000-562004ada000 -> /usr/bin/pulseaudio
    lr--------. 1 alan-sysop alan-sysop 64 Mar 18 23:50 562004cda000-562004cdb000 -> /usr/bin/pulseaudio
    lr--------. 1 alan-sysop alan-sysop 64 Mar 18 23:50 562004cdb000-562004cdc000 -> /usr/bin/pulseaudio
    lrw-------. 1 alan-sysop alan-sysop 64 Mar 18 23:50 7fab98000000-7fab9c000000 -> /memfd:pulseaudio (deleted)
    lrw-------. 1 alan-sysop alan-sysop 64 Mar 18 23:50 7fab9c000000-7faba0000000 -> /memfd:pulseaudio (deleted)
    lrw-------. 1 alan-sysop alan-sysop 64 Mar 18 23:50 7faba0000000-7faba4000000 -> /memfd:pulseaudio (deleted)
    lrw-------. 1 alan-sysop alan-sysop 64 Mar 18 23:50 7faba4000000-7faba8000000 -> /memfd:pulseaudio (deleted)
    lrw-------. 1 alan-sysop alan-sysop 64 Mar 18 23:50 7faba8000000-7fabac000000 -> /memfd:pulseaudio (deleted)
    lrw-------. 1 alan-sysop alan-sysop 64 Mar 18 23:50 7fabac000000-7fabb0000000 -> /memfd:pulseaudio (deleted)
    
    $ sudo stat --dereference /proc/$(pgrep pulseaudio)/map_files/7fab98000000-7fab9c000000
      File: /proc/25911/map_files/7fab98000000-7fab9c000000
      Size: 67108864    Blocks: 0          IO Block: 4096   regular file
    Device: 5h/5d   Inode: 2399078     Links: 0
    Access: (0777/-rwxrwxrwx)  Uid: ( 1000/alan-sysop)   Gid: ( 1000/alan-sysop)
    Context: unconfined_u:object_r:user_tmp_t:s0
    Access: 2018-03-18 23:47:48.714061694 +0000
    Modify: 2018-03-18 23:47:48.713061683 +0000
    Change: 2018-03-18 23:47:48.713061683 +0000
     Birth: -
    

    例如,至少可以看到没有单独的 memfd,至少由 FD 或内存映射直接保存,自己消耗千兆字节。不过,如果有一些更好的工具或脚本来解决这个问题,仍然会很好。

    $ sudo du -aLh /proc/*/map_files/ /proc/*/fd/ | sort -h | tail
    du: cannot access '/proc/self/fd/3': No such file or directory
    du: cannot access '/proc/thread-self/fd/3': No such file or directory
    108M    /proc/10397/map_files/7f1e141b4000-7f1e1ad84000
    111M    /proc/14862/map_files/
    112M    /proc/10397/map_files/
    113M    /proc/18324/map_files/7efdda2fb000-7efddaafb000
    121M    /proc/18324/map_files/7efdea2fb000-7efdeaafb000
    129M    /proc/18324/map_files/7efdc82fb000-7efdc8afb000
    129M    /proc/18324/map_files/7efdd42fb000-7efdd4afb000
    129M    /proc/18324/map_files/7efde52fb000-7efde5afb000
    221M    /proc/26350/map_files/
    3.9G    /proc/18324/map_files/
    
    $ ps -x -q 18324
      PID TTY      STAT   TIME COMMAND
    18324 pts/1    S+     0:00 journalctl -b -f
    
    $ ps -x -q 26350
      PID TTY      STAT   TIME COMMAND
    26350 ?        Sl     4:35 /usr/lib64/firefox/firefox
    
    $ sudo ls -l /proc/18324/map_files/7efde52fb000-7efde5afb000
    lr--------. 1 root root 64 Mar 19 00:32 /proc/18324/map_files/7efde52fb000-7efde5afb000
    -> /var/log/journal/f211872a957d411a9315fd911006ef03/user-1001@c3f024d4b01f4531b9b69e0876e42af8-00000000002e2acf-00055bbea4d9059d.journal
    
    • 3

相关问题

Sidebar

Stats

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

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve