You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

/proc/modules是否仅列已正确加载内核模块?附相关技术疑问

关于/proc/modules的两个常见问题解答

问题1:若模块第三列值为0,是否表示当前已不在内核中加载?若属实,为何仍存在内核地址?

首先明确:/proc/modules第三列的数值是模块的引用计数,值为0并不代表模块已经完全从内核中移除,而是说明该模块当前没有被任何内核组件或用户进程引用,已经被标记为待卸载状态。

内核的模块卸载流程是异步的:当引用计数降到0时,内核会触发模块的卸载回调,但不会立即释放模块占用的所有内存和地址空间——可能存在以下几种情况导致地址仍存在:

  • 内核需要等待某些异步操作完成(比如残留的I/O请求、延迟清理的内核对象)
  • 模块的内存页可能还在缓存中,尚未被内核回收复用
  • 部分内核子系统的资源释放存在延迟

此时该模块已经不再活跃,不会处理任何新的请求,只是还没完成最后的资源清理步骤,直到内核彻底完成卸载流程后,该模块条目才会从/proc/modules中消失。

问题2:若/proc/modules仅显示当前已加载的内核模块,如何查询开机后自动加载的所有内核模块列表?

可以通过以下几种方式查询系统配置的开机自动加载模块:

  • 查看显式加载配置文件:
    系统中专门配置开机加载模块的目录是/etc/modules-load.d/和/usr/lib/modules-load.d/,里面的.conf文件直接列出了要在开机时加载的模块。可以用以下命令查看:
    cat /etc/modules-load.d/*.conf /usr/lib/modules-load.d/*.conf
    
  • 检查modprobe配置的隐式加载:
    /etc/modprobe.d/和/usr/lib/modprobe.d/下的配置文件可能通过install指令强制加载模块,或者通过依赖关系间接触发加载。可以通过以下命令筛选相关配置:
    grep -r "install" /etc/modprobe.d/ /usr/lib/modprobe.d/
    
  • 查看udev触发的自动加载:
    很多硬件相关模块是通过udev规则在开机检测到硬件时自动加载的,相关规则位于/usr/lib/udev/rules.d/和/etc/udev/rules.d/,可以查找包含RUN+="/sbin/modprobe"的规则:
    grep -r "modprobe" /usr/lib/udev/rules.d/ /etc/udev/rules.d/
    
  • 查看内核内置模块:
    有些模块是直接编译进内核的(而非可加载的.ko文件),会随内核启动直接加载,可以通过以下命令查看所有内置模块:
    cat /lib/modules/$(uname -r)/modules.builtin
    

内容的提问来源于stack exchange,提问作者OneAndOnly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 08:52:51