/proc/modules 中模块的加载状态

Load state of a module in /proc/modules

根据这个question的回答,给出/proc/modules的第五个字段是模块的负载状态,可以是LiveLoadingUnloading。但是在我的 Ubuntu 14.04 系统和其他一些系统中,我只能找到该字段的值 Live。该字段是否也可以具有其他值?

该字段有 3 种可能的状态:

  • Live
  • Loading
  • Unloading

你可以在内核源代码中看到这个,在 kernel/module.c 文件中:

/* Informative for users. */
seq_printf(m, " %s",
           mod->state == MODULE_STATE_GOING ? "Unloading" :
           mod->state == MODULE_STATE_COMING ? "Loading" :
           "Live");

mod->state 的描述可以在 enum module_stateinclude/linux/module.h 中找到:

enum module_state {
    MODULE_STATE_LIVE,      /* Normal state. */
    MODULE_STATE_COMING,    /* Full formed, running module_init. */
    MODULE_STATE_GOING,     /* Going away. */
    MODULE_STATE_UNFORMED,  /* Still setting it up. */
};

该字段可能有其他值,但这些是过渡状态,您很难从内核外部发现它们。例如,Loading 状态只会从模块完全加载到内存中持续到其初始化完成。通常,这只需要几微秒。