Linux 内核进程管理 ( 进程特殊形式 | 内核线程 | 用户线程 | C 标准库与 Linux 内核中进程相关概念 | Linux 查看进程命令及输出字段解析 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 内核进程管理 ( 进程特殊形式 | 内核线程 | 用户线程 | C 标准库与 Linux 内核中进程相关概念 | Linux 查看进程命令及输出字段解析 )相关的知识,希望对你有一定的参考价值。

文章目录





一、进程特殊形式 ( 内核线程 | 用户线程 )



普通的进程 , 包含 内核虚拟地址空间用户虚拟地址空间 , 其中 内核虚拟地址空间 所有进程共享 , 用户虚拟地址空间 由进程独立拥有 ;


除了 普通进程 外 , 进程 还有 2 2 2 种 特殊形式 :

  • 内核级线程 : 只有 内核虚拟地址空间 , 没有 用户虚拟地址空间 的进程 , 称为 内核线程 ;
  • 用户级线程 : 共享 用户虚拟地址空间 的进程 , 称为 用户线程 ;

线程 : 用户线程 又称为 线程 ;

线程组 : 共享 相同 用户虚拟地址空间 的线程 , 组成了一个 线程组 ,





二、C 标准库与 Linux 内核中进程相关概念



C 语言中 标准库 提供的 进程 , 与 Linux 内核 中的 进程 这两个概念是不同的 ;

C 标准库 中的 包含多个线程 的进程 , 在 Linux 内核中 称为 " 线程组 " ;

C 标准库 中的 只有一个线程 的进程 , 在 Linux 内核中 称为 " 任务 / 进程 " ;

C 标准库 中的 线程 , 在 Linux 内核中 称为 " 共享 用户虚拟地址空间 的 进程 "





三、Linux 查看进程命令及输出字段解析



在 Ubuntu 中 , 执行

ps aux

命令 , 可以查看当前系统的进程状态 , 确定有哪些进程 正在运行 , 占用的 CPU , 内存资源比例, 进程 ID 是多少 ;

ps 命令显示的当前执行命令时的 瞬间状态 , 不是 实时动态更新的 ;

实时进程使用 top 命令 ;


进程字段说明 :

  • USER : 表示 进程是属于哪个账户的 ;
  • PID : 进程 ID ;
  • %CPU : 使用的 CPU 资源占用的 百分比 ;
  • %MEM : 使用的 内存 资源占用的 百分比 ;
  • VSZ : 该进程 占用的虚拟内存容量是多少 , 单位是 KB , 225864 表示 225864KB ;
  • RSS : 实际占用的内存容量 ;
  • TTY : 进程 运行的终端 ;
  • STAT : 程序目前的状态 ; S 表示程序在休眠 , 可以发送信号唤醒 ;

执行过程如下 :

root@octopus:~# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.3  0.2 225864  9376 ?        Ss   09:26   0:03 /sbin/init splash
root          2  0.0  0.0      0     0 ?        S    09:26   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        I<   09:26   0:00 [rcu_gp]
root          4  0.0  0.0      0     0 ?        I<   09:26   0:00 [rcu_par_gp]
root          6  0.0  0.0      0     0 ?        I<   09:26   0:00 [kworker/0:0H-kb]
root          9  0.0  0.0      0     0 ?        I<   09:26   0:00 [mm_percpu_wq]
root         10  0.0  0.0      0     0 ?        S    09:26   0:00 [ksoftirqd/0]
root         11  0.0  0.0      0     0 ?        I    09:26   0:00 [rcu_sched]
root         12  0.0  0.0      0     0 ?        S    09:26   0:00 [migration/0]
root         13  0.0  0.0      0     0 ?        S    09:26   0:00 [idle_inject/0]
root         14  0.0  0.0      0     0 ?        S    09:26   0:00 [cpuhp/0]
root         15  0.0  0.0      0     0 ?        S    09:26   0:00 [cpuhp/1]
root         16  0.0  0.0      0     0 ?        S    09:26   0:00 [idle_inject/1]
root         17  0.0  0.0      0     0 ?        S    09:26   0:00 [migration/1]
root         18  0.0  0.0      0     0 ?        S    09:26   0:00 [ksoftirqd/1]
root         20  0.0  0.0      0     0 ?        I<   09:26   0:00 [kworker/1:0H-kb]
root         21  0.0  0.0      0     0 ?        S    09:26   0:00 [cpuhp/2]
root         22  0.0  0.0      0     0 ?        S    09:26   0:00 [idle_inject/2]
root         23  0.0  0.0      0     0 ?        S    09:26   0:00 [migration/2]

以上是关于Linux 内核进程管理 ( 进程特殊形式 | 内核线程 | 用户线程 | C 标准库与 Linux 内核中进程相关概念 | Linux 查看进程命令及输出字段解析 )的主要内容,如果未能解决你的问题,请参考以下文章

《内核设计与实现》读书笔记- 进程管理

Linux 内核进程管理 ( 内核线程概念 | 内核线程普通进程用户线程 | 内核线程与普通进程区别 | 内核线程主要用途 | 内核线程创建函数 kernel_thread 源码 )

Linux 进程管理之进程调度与切换

了解Linux内核如何管理一个进程的内存

《Linux内核设计与实现》读书笔记- Linux的进程

结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程