为什么内核模块cfg80211也被列为内核进程[cfg80211]?

为什么内核模块cfg80211也被列为内核进程[cfg80211]?

我不明白为什么内核模块也如下所示cfg80211列出:ps aux

$ ps aux | grep cfg80211
root 521 0.0 0.0 0 0 ? S< 16:09 0:00 [cfg80211]

答案1

列出内核线程是标准行为ps,因为它们也是进程——只是一种不同的进程,因为它们运行在主管模式(有些人称之为“内核模式”)。

如果您运行ps ax(或ps aux)而不将其输出通过管道传输到grep,您将看到首先列出的一大堆内核模​​块(然后可能是一些其他模块,它们散布在用户进程中,如果它们是稍后启动的)。

例如,这是ps ax我的系统上当前输出的前 10 行:

  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:03 /sbin/init
    2 ?        S      0:01 [kthreadd]
    3 ?        S     97:17 [ksoftirqd/0]
    6 ?        S      0:00 [migration/0]
    7 ?        S      0:24 [watchdog/0]
    8 ?        S      0:00 [migration/1]
   10 ?        S      6:06 [ksoftirqd/1]
   12 ?        S      0:18 [watchdog/1]
   13 ?        S<     0:00 [cpuset]

lsmod将列出已加载的模块。ps aux将列出当前进程,包括与模块关联的内核进程。但是,它们是不同的。例如,已加载的内核模块可能有任意数量的内核进程与其关联(零个或多个)。

相关内容