我曾经cat /proc/modules
列出流程细节。下面的模块显示存在 4 个实例:
poe_isr 3046 4 - Live 0xc37e1000 (O)
这是什么意思?如何查看这些实例的使用位置?如果模块显示为 0 个实例并且 Live,这是什么意思?未加载的模块仍然在线?
adcmods 1565 0 - Live 0xc37dd000 (P)
我曾经cat /proc/modules
列出流程细节。下面的模块显示存在 4 个实例:
poe_isr 3046 4 - Live 0xc37e1000 (O)
这是什么意思?如何查看这些实例的使用位置?如果模块显示为 0 个实例并且 Live,这是什么意思?未加载的模块仍然在线?
adcmods 1565 0 - Live 0xc37dd000 (P)
这是一个计数器。它可以由内核核心 API 递增或递减。
这是模块的责任,它们何时增加它。例如,如果您
somefs
在内核中有一个模块,那么等待的行为是随着somefs
分区的任何挂载而增加此计数器,并在卸载时减少它。这样可以保证有挂载分区somefs
时不会被删除。somefs
如果模块使用计数器不为零,则
rmmod
在该模块上失败。但是rmmod -f
,如果强制模块删除被编译到内核中,则不会。因此,重要的事情:
ipv6
以这种方式工作的那样,它将计数器增加到 1insmod
并且永远不会减少。因此,如果您编译ipv6
为模块,您将永远无法使用rmmod
它。一些视频卡驱动程序以类似的方式工作,因为它的例程会取消初始化它,丢失了。没有这样的模块可以成为其开发人员的骄傲。其中的第 3 列表示有 4 个依赖模块/进程。因此
rmmod
行不通。第 4 列表示这些是模块还是非模块。'-' 表示 4 是非模块。在上面的例子中, poe_isr 依赖于 4 个非模块。