当前位置: 首页 > news >正文

Linux 进程和线程基础知识解析

一、进程基础知识

1、简介

进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,也是操作系统结构的基础。它既是程序的执行实例,也是程序在操作系统中的动态表现。简单来说,进程是运行中的程序。程序是死的、静止的,但进程是活的、动态的。当运行一个程序时,操作系统会创建一个进程,并为其分配独立的资源。

2、特点

  • 动态性:进程是动态产生的,随着程序的执行而不断变化,并在执行完毕后动态消亡。

  • 独立性:进程是一个独立的运行实体,拥有自己独立的地址空间和系统资源,如处理器、存储器、I/O设备等。

  • 异步性:由于进程间的相互制约和资源共享,使得进程的执行具有间断性,即进程按各自独立的、不可预知的速度向前推进。

  • 并发性:多个进程可以在同一时间段内并发执行,共享系统资源。

3、表现样式

Process: 运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位。

  • 进程ID(Process ID,PID)号码被用来标记各个进程

  • UID、GID、和SELinux语境决定对文件系统的存取和访问权限【/usr/bin/passwd】

  • 通常从执行进程的用户来继承

  • 存在生命周期

4、创建流程

操作系统创建一个新的进程时,会按照以下步骤操作:

  1. 为新进程分配一个唯一的进程标识符。此时,主进程表中会添加一个新表项,每个进程一个表项。

  2. 为进程分配空间。这包括进程映像中的所有元素。因此,操作系统必须知道私有用户地址空间(程序和数据)和用户栈需要多少空间。默认情况下会根据进程的类型分配这些值,也可以在作业创建时基于用户请求设置这些值;最后,必须为进程控制块分配空间。

  3. 初始化进程控制块。进程标识符部分包括进程ID和其他相关的ID,如父进程的ID等;处理器的状态信息大多初始化为0,但程序计数器和系统栈指针除外。进程最初不拥有任何资源,除非显式的请求了这些资源或几层了父进程的资源。

  4. 设置正确的链接。例如,若操作系统将每个调度队列都维护为一个链表,则新进程必须放在就绪或就绪/挂起链表中。

  5. 创建或扩充其他数据结构。例如,操作系统可因编制账单和或评估性能,为每个进程维护一个记账文件。

5、结构解析

每个进程都有操作系统分配给其的独特资源,包含内存、栈、文件描述符等信息。

进程由程序、数据和进程控制块三部分组成。

  • 程序是进程要执行的指令集合,它通常存储在内存中的代码段中。程序代码是进程执行的基础,由CPU读取指令并执行。

  • 数据是进程在执行过程中需要处理的信息,表示进程正在使用的数据,包括全局变量、局部变量、常量等。数据通常存储在内存中的数据段中,供程序代码在运行时读取和修改。

  • 进程控制块则包含了进程的各种信息和控制信息,是进程存在的唯一标志,用于记录进程的状态和相关信息。PCB中包含了进程的ID(PID)、状态(如就绪、运行、阻塞等)、优先级、输入输出信息等。PCB通常会存储在操作系统内核中,以便操作系统对进程进行管理和调度。

PID:即进程号。操作系内核为每个进程分配的唯一整数标识符,用于唯一标识进程。

状态:进程在生命周期会处于不通状态。包含:就绪状态、运行状态、睡眠状态、跟踪状态、僵尸状态、停止状态等。

优先级:是一个数值,表示进程在系统中的执行顺序,决定了进程的执行优先级和调度策略。实时进程优先级范围是0到MAX_RT_PRIO-1(0-99),普通进程的静态优先级范围是从MAX_RT_PRIO到MAX_PRIO-1(100-139)。

二、线程基础知识

1、简介

线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是操作系统进行CPU 调度和分派的基本单位。一个进程可以包含一个或多个线程,这些线程共享进程的资源,但有自己独立的执行路径。

2、特点

  • 共享性:同一个进程内的所有线程,都共享该进程的所有资源,包含地址空间、文件描述符、全局变量等,仅线程私有资源(栈、计数器、寄存器等)独立。

  • 轻量性:切换时开销较小,因为线程共享进程的内存和资源,只需要切换线程的上下文即可。这使得多线程程序能够更高效地利用系统资源。

  • 依赖性:无法独立存在,必须依附于进程。进程退出,其中的所有线程也会终止。

3、与进程的区别

对比属性进程线程
调度单位早期为调度单位,现为多线程任务调度和执行的基本单位
开销开销大,创建、销毁及切换成本高开销小,共享资源,切换成本低
通信依靠IPC机制直接共享内存或消息传递
包含关系一个进程可以有一个或多个线程一个线程只能属于一个进程
资源分配独立资源共享进程的资源
独立性高、一个崩溃不影响其他进程低、一个崩溃可能影响整个进程
并发并行并发并行

三、进程管理工具

1、pstree 命令

该命令以树状图的形式显示进程及其子进程的层次结构,清晰地表达了进程间的父子关系。这种展示方式比简单的列表(如ps命令的输出)更加直观,有助于用户快速理解进程的继承关系。

命令格式

pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ] [ -A | -G | -U ] [ PID | USER ]

常用选项

  • -p|--show-pids : 显示PID,包含 -c 选项

一般选项

  • -a|--arguments : 显示该进程的完整指令及参数

  • -A|--ascii : 使用 ASCII 字符绘制线条

  • -c|--compact : 不压缩相同的子树

  • -h|--highlight-all : 高亮显示当前进程及父进程

  • -H PID|--highlight-pid=PID : 高亮显示指定进程及父进程

  • -g|--show-pgids : 显示进程组ID,包含 -c 选项

  • -G|--vt100 : 使用VT100线条绘制字符

  • -l|--long : 不要截断长线

  • -n|--numeric-sort : 根据PID排序显示

  • -N type|--ns-sort=type : 根据指定规则排序

  • (cgroup|ipc|mnt|net|pid|user|uts)

  • -s|--show-parents : 显示父进程

  • -S|--ns-changes : 显示命名空间

  • -t|--thread-names : 显示完整线程名称

  • -T|--hide-threads : 不显示线程

  • -u|--uid-changes : 显示进程切换

  • -Z|--security-context : 显示selinux相关信息

查看进程树

显示进程切换

显示指定用户的进程

显示父进程

2、ps 命令

全称是process status,意为进程状态。通过ps命令,用户可以获取当前系统中正在运行的进程的各种详细信息,如进程ID(PID)、进程状态、CPU使用情况、内存占用、运行时间等。可以查看进程当前状态的快照,默认显示当前终端中的进程,Linux系统各进程的相关信息均保存/proc/PID目录下的各文件中。

命令格式

ps [options]

常用选项

  • a : 选项包括所有终端中的进程

  • x : 选项包括不链接终端的进程

  • u : 选项显示进程所有者的信息

一般选项

  • f|--forest : 选项显示进程树,相当于

  • k|--sort opt : 对属性排序,属性前加 - 表示倒序(--sort=uid,-ppid,+pid)

  • o : 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem

  • L : 显示支持的属性列表

  • -C cmdlist : 指定命令,多个命令用,分隔

  • -L : 显示线程

  • -e : 显示所有进程,相当于-A

  • -f : 显示完整格式程序信息

  • -F : 显示更完整格式的进程信息

  • -H : 以进程层级格式显示进程相关信息

  • -u userlist|--user userlist : 指定有效的用户ID或名称

  • -U userlist|--User userlist : 指定真正的用户ID或名称

  • -g grplist|--group grplist : 指定有效的gid或组名称

  • -G grplist|--Group grplist : 指定真正的gid或组名称

  • -p pid : 显示指pid的进程

  • --ppid pid : 显示属于pid的子进程

  • -t ttylist : 指定tty,相当于 t

  • -M : 显示SELinux信息,相当于Z

ps 输出信息

  • USER : 进程属主

  • PID : 进程ID

  • PPID : 父进程ID

  • %CPU : CPU占用率

  • %MEM : 内存占用率

  • VSZ : Virtual memory SiZe,虚拟内存集,线性内存,虚似内存

  • RSS : ReSident Size,常驻内存集,实际占用物理内存

  • TTY : 终端

  • STAT : 进程状态

  • START : 进程开始时间

  • TIME : 累计分配给进程的cpu时长

  • COMMAND : 对应的程序及参数

  • UID : 进程属主

  • C : cpu利用率,取整

  • STIME : 进程开始时间

  • CMD : 对应的程序及参数

  • ni : nice值

  • pri : priority优先级。

  • rtprio : 实时优先级,不是所有的进程都有实时优先级的。

  • psr : processor CPU编号

进程状态字段说明

  • R : running ,运行中

  • S : interruptable sleeping,可中断的睡眠状态

  • D : uninterruptable sleeping,不可中断的睡眠状态

  • T : stopped,停止态

  • Z : zombie,僵尸态

  • + : 前台进程

  • I : Idle kernel thread,CentOS 8 新特性

  • L : 内存分页并带锁

  • N : 低优先级进程

  • < : 高优先级进程

  • s : session leader,会话(子进程)发起者

  • l : 多线程进程

查看当前终端进程

显示所有所有进程,并列出所属用户

详细格式显示所有进程

显示指定列

显示当前用户所拥有的所有进程

查看进程父子关系

查看指定用户的进程

3、top 命令

用于实时显示系统的运行状况,特别是各个进程的资源和性能使用情况。它提供了一个动态更新的视图,帮助系统管理员和用户监控系统的健康状态。

命令格式

top -hv | -bcEHiOSs1 -d secs -n max -u|U user -p pid(s) -o field -w [cols]

常见选项

  • -n N : 刷新多少次后退出

  • -d N : 指定刷新时间间隔,默认为3秒

一般选项

  • -h|v : 显示帮助

  • -b : 显示全部所有进程

  • -c : 显示命令信息

  • -E{k|m|g|t|p|e} : 指定内存显示单位

  • -H : 线程模式

  • -1 : 十进制数字1,在首部分别显示每颗CPU信息

  • -p PID : 显示指定进程的数据

  • -u|U user : 查看指定用户的进程

  • -w cols : 指定输出内容显示宽度

交互命令

  • 手动刷新:在top运行时,可以通过输入回车或空格来手动刷新显示。

  • 退出:按q键可以退出top命令。

排序命令

  • P或Shift+p:按CPU使用率对进程进行排序。默认是降序排列,再次按键则切换为升序。

  • M或Shift+m:按内存使用量RES对进程进行排序。默认是降序排列,再次按键则切换为升序。在计算机系统中,RES(Resident Set Size)即常驻集大小,是指进程实际占用的物理内存大小

  • N:按进程ID排序 - 降序。

  • T:按运行时间TIME或累积时间对任务排序。

  • o或Shift+o:设置排序的关键字,可以根据需要选择不同的排序依据。

进程操作命令

  • k:杀死指定的进程。系统会提示输入进程号和要发送的信号,默认信号是SIGTERM。如果要强行杀死进程,可以输入SIGKILL(信号编号为9)。

  • r:改变某个进程的优先级。需要输入进程号和新的nice值,最后按Enter

显示设置命令

  • c:切换是否显示每个进程的完整命令行。

  • f或Shift+f:进入或离开自定义显示字段模式,可以添加或移除显示的列。

  • d:改变两次屏幕刷新之间的延时时间。

  • t:显示当前时间、系统运行时间以及空闲/繁忙周期,尤其是图形比例图。

  • i:开启或关闭忽略闲置(idle)和僵死(zombie)进程的显示。

视图切换命令(0、1、2、3:在不同视图间切换。)

  • 按 0:显示所有 CPU 核心的总占用率。将所有 CPU 核心的使用率合并显示为一个整体,适用于快速查看系统整体 CPU 负载,不关注单个核心的情况。

  • 按 1:显示每个 CPU 核心的占用率(最常用)。将每个 CPU 核心的使用率单独列出,用于排查 CPU 负载是否均衡,或定位某个核心高占用的进程(如多核 CPU 中某核心被压满)。按两次1表示恢复到0的状态。

  • 按 2:切换 SMP(对称多处理)模式显示。当系统启用 SMP 时,控制是否将 CPU 核心分组显示(通常与1配合使用)。该按键在现代系统中使用较少,默认状态下已自动适配多核显示。按两次2表示恢复到0的状态。

  • 按 3:切换 CPU 时间统计方式(用户态 / 内核态)。控制是否突出显示用户态(us)和内核态(sy)的 CPU 时间占比。部分top版本可能不支持该按键,或功能被整合到其他操作中。

查看状态

5秒刷新一次

显示指定用户进程

显示进程具体的命令


文章转载自:

http://pCHz13f9.kfsfm.cn
http://sWp2dr1k.kfsfm.cn
http://tVstgrNf.kfsfm.cn
http://uAIyssu7.kfsfm.cn
http://ANpGUT8B.kfsfm.cn
http://c0wZdVmB.kfsfm.cn
http://oC9vOF4b.kfsfm.cn
http://4dt6MJhp.kfsfm.cn
http://a4ml20dW.kfsfm.cn
http://bPFBRvxf.kfsfm.cn
http://mhI41saE.kfsfm.cn
http://bXIf3d0p.kfsfm.cn
http://oTuI3SPt.kfsfm.cn
http://UmINLLKI.kfsfm.cn
http://kXMbb0oJ.kfsfm.cn
http://XwODviad.kfsfm.cn
http://m5UYtS2d.kfsfm.cn
http://kmXznUVB.kfsfm.cn
http://StPgkfbF.kfsfm.cn
http://4qz2HRTR.kfsfm.cn
http://TbewDKLF.kfsfm.cn
http://uc4sYwgA.kfsfm.cn
http://qXcCJMwu.kfsfm.cn
http://vHPgIWUh.kfsfm.cn
http://MFM1FfJi.kfsfm.cn
http://34f7MjsT.kfsfm.cn
http://t8lQNL5Q.kfsfm.cn
http://yWMSZDgn.kfsfm.cn
http://nl5FGYws.kfsfm.cn
http://b21dcNMp.kfsfm.cn
http://www.dtcms.com/a/380638.html

相关文章:

  • MySQL 查询不正确身份证号的方法
  • 淘宝商品详情 API 的安全强化与生态协同创新路径
  • 全志A133 android10 secure boot 安全启动
  • 储能电站的监控运维软件推荐,降低运营成本
  • 麒麟v10系统内存不足
  • fpga图像处理
  • 使用netstat 获取各Oracle数据库实例对应应用IP地址脚本
  • QT M/V架构开发实战:QAbstractItemModel介绍
  • PHP 与 WebAssembly 的 “天然隔阂”
  • QML 的第一步
  • IP验证学习之env集成编写
  • Android8 binder源码学习分析笔记(四)——ServiceManager启动
  • fastapi搭建Ansible Playbook执行器
  • 第四阶段C#通讯开发-1:通讯基础理论,串口,通讯模式,单位转换,代码示例
  • 微信小程序——云函数【使用使用注意事项】
  • 【java】常见排序算法详解
  • HarmonyOS 应用开发深度解析:基于声明式UI的现代化状态管理实践
  • Linux 中 exec 等冷门命令的执行逻辑探究
  • Qt多语言翻译实战指南:常见陷阱与动态切换解决方案
  • 【秋招笔试】2025.09.11阿里云秋招算法岗笔试真题
  • Ethernaut Level 1: Fallback - 回退函数权限提升攻击
  • 【VPX637】基于XCKU115 FPGA+ZU15EG MPSOC的6U VPX双FMC接口通用信号处理平台
  • Flutter基础(②④事件回调与交互处理)
  • 软考系统架构设计师之软件架构篇
  • 软考-系统架构设计师 访问控制和数字签名技术详细讲解
  • C语言初学者笔记【预处理】
  • android中ViewModel 和 onSaveInstanceState 的最佳使用方法
  • 达梦:将sql通过shell脚本的方式放在后台执行
  • 进阶向:从零开始理解Python音频处理系统
  • Centos7安装nginx