掘金 后端 ( ) • 2024-04-17 09:36

theme: channing-cyan

55ec188d3635445bfa288e539e300dd.jpg

一、什么是程序?

  • 文件中静态保存的代码

  • 是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。

  • 用于描述进程要完成的功能,是控制进程执行的指令集。

  • 保存在硬盘、光盘等介质中的可执行代码和数据。

二、什么是进程

  • 运行的程序在内存中的叫进程

  • 电脑用pid来识别进程;程序运行,系统自动分配pid

  • 存在生命周期

  • 都由其父进程创建

三、进程具有的特征

12104f9ce6fdd98027101ec44cee72e.png

  • 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;

  • 并发性:任何进程都可以同其他进程一起并发执行;

  • 独立性:进程是系统进行资源分配和调度的一个独立单位;

  • 结构性:进程由程序、数据和进程控制块三部分组成。

四、进程的基本状态

85701a046b9ed093e4afbf22ec75627.png

  • 创建状态:进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态;

  • 就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行;

  • 执行状态:进程处于就绪状态被调度后,进程进入执行状态;

  • 阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用;

  • 终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行。

五、进程的状态

  • 运行态:running

  • 就绪态:ready

  • 睡眠态:分为两种,可中断:interruptable,不可中断:uninterruptable;

  • 停止态:stopped,暂停于内存,但不会被调度,除非手动启动;

  • 僵尸态:zombie,僵尸态,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭僵尸态 的子进程。

六、什么是线程

线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

60年代,在OS中能拥有资源和独立运行的基本单位是进程,然而随着计算机技术的发展,进程出现了很多弊端,一是由于进程是资源拥有者,创建、撤消与切换存在较大的时空开销,因此需要引入轻型进程;二是由于对称多处理机(SMP)出现,可以满足多个运行单位,而多个进程并行开销过大。因此在80年代,出现了能独立运行的基本单位——线程(Threads)。

查看进程有几个线程,可以使用 "cat /proc/PID/status"查看。

七、进程和线程的区别

  • 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;

  • 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;

  • 调度和切换:线程上下文切换比进程上下文切换要快得多;

  • 程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;

  • 同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的;

  • 一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。

八、僵尸进程

僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源。

在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由init 来接管他,成为他的父进程。

示例

image.png

image.png

九、查看进程信息

1.ps命令:查看静态进程统计信息

ps 命令是 Process Status 的缩写 ,可以查看进程当前状态的快照。查看静态的进程统计信息,即执行 ps 命令的那个时刻的进程快照。默认显示当前终端中的进程,Linux系统各进程的相关信息均保存在/proc/PID 目录下的各文件中。

常用选项

  • a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息。

  • u:使用以用户为主的格式输出进程信息。

  • x:显示当前用户在所有终端下的进程信息。

  • -e:显示系统内的所有进程信息。

  • -l:使用长(Long)格式显示进程信息。

  • -f:使用完整的(Full)格式显示进程信息。

  • k|--sort 属性:对属性排序,属性前加 - 表示降序排列。

ps命令支持三种语法格式

  • UNIX风格。选项可以组合在一起,并且选项前必须有 "-" 连字符 。如:ps -ef。

  • GNU选项。选项前有两个 "-" 连字符 。如:ps --help。

  • BSD选项。选项可以组合在一起,但是选项前不能有 "-" 连字符。如:ps aux。

我们常用的是BSD选项,这个一般看个人选择。

查看静态进程统计信息命令:ps aux

  • a:显示终端上的所有进程,包括其它用户的进程

  • u:表示列出进程的用户名

  • x:显示所有终端的进程

示例

image.png

进程信息共有11个字段,每个字段含义如下:

表头(列名) 含义 重点 USER 进程的用户 PID 进程的id号 %CPU 进程占用CPU百分比 * %MEM 进程占用内存百分比 * VSZ 该进程使用的虚拟内存量(KB) RSS 该进程占用的物理内存量(KB) TTY 启动进程终端名 STAT 该进程的状态 * START 该进程启动时间 TIME 该进程实际使用CPU运行的时间 COMMAND 进程启用的命令

STAT进程的状态:

  • D:不可中断休眠状态

  • S:处于休眠状态,可被唤醒

  • R:正在运行状态

  • T:停止状态,可能是在后台暂停或进程处于跟踪调试状态

  • Z:僵尸进程,进程已经终止,但部分程序还在内存当中

查看静态进程统计信息命令:ps -elf

  • -e:显示系统内的所有进程信息

  • -l:使用长格式显示进程信息

  • -f:使用完整的格式显示进程信息

示例:

image.png

进程信息共有14个字段,每个字段含义如下:

表头(列名) 含义 F 进程标志,说明进程的权限,常见的标志有两个: 1:进程可以被复制,但是不能被执行; 4:进程使用超级用户权限; S 进程状态。具体的状态和"psaux"命令中的 STAT 状态一致; UID 运行此进程的用户的 ID; PID 进程的 ID; PPID 父进程的 ID; C 该进程的 CPU 使用率,单位是百分比; PRI 进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;系统定义不可以人为修改 NI 进程的优先级,数值越小,该进程越早被执行;可以人为修改,数值范围:-20~19 ADDR 该进程在内存的哪个位置; SZ 该进程占用多大内存; WCHAN 该进程是否运行。"-"代表正在运行; TTY 该进程由哪个终端产生; TIME 该进程占用 CPU 的运算时间,注意不是系统时间; CMD 产生此进程的命令名;

如果不想看到所有的进程,只想查看一下当前登录的终端产生了哪些进程,那只需使用 "ps -l" 命令就足够了。

自定义显示字段(查看进程的特定属性)

1)ps axo 列名,列名,列名,列名

image.png

1)ps -eo 列名,列名,列名,列名

image.png

进程排序

1)按CPU占比升序排列:ps aux --sort=%cpu。

image.png

2)按内存占比降序排列:ps aux --sort=-%mem。

image.png

特殊示例:找到未知进程的执行程序文件路径

准备:未知进程的执行程序文件

image.png

1.查找静态进程信息,CPU倒序,只显示前十行。

image.png

2.通过PID号,切换到未知进程所在的文件夹

image.png

3.找到exe文件夹,未知进程的绝对路径就在其中。

image.png

4.确定未知进程的执行程序文件路径是否有用,若无用,则删除未知进程的执行程序文件路径,并在相同路径下建立一个相同名称的文件。(这也是预防电脑病毒的方法)

2.top命令:查看动态进程统计信息

ps 命令可以一次性给出当前系统中进程状态,但使用此方式得到的信息缺乏时效性,并且,如果管理员需要实时监控进程运行情况,就必须不停地执行 ps 命令,这显然是缺乏效率的。

为此,Linux 提供了 top 命令。top 命令可以动态地持续监听进程地运行状态,与此同时,该命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出,进而更清楚地了进程的运行状态

命令的输出主要分为两部分:

  • 第一部分是前五行,显示的是整个系统的资源使用状况,我们就是通过这些输出来判断服务器的资源使用状态的。

  • 第二部分从第六行开始,显示的是系统中进程的信息.

image.png

top命令输出内容——第一部分详解

image.png

第一部分是前五行,显示的是整个系统的资源使用状况。

1)第一行是任务队列信息:top - 15:21:57 up 1:20, 2 users, load average: 0.03, 0.02, 0.05

  • 15:21:57:系统当前时间

  • up 1:20:系统的运行时间。本机己经运行了一个小时20分钟

  • 2 users:当前登录了两个用户

  • load average: 0.03, 0.02, 0.05:系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 (这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数)。

2)第二行是进程信息:Tasks: 152 total, 1 running, 151 sleeping, 0 stopped, 0 zombie

  • 152 total:系统中的进程总数

  • 1 running:正在运行的进程数

  • 151 sleeping:睡眠的进程数

  • 0 stopped:停止(暂停)的进程数

  • 0 zombie:僵尸进程数。如果不是 0,则需要手工检查僵尸进程。

3)第三行是 CPU 信息:%Cpu(s): 0.2 us,0.0 sy,0.0 ni,99.8 id,0.0 wa,0.0 hi, 0.0 si, 0.0 st

内 容 说 明 0.2 us 用户模式占用的 CPU 百分比 0.0 sy, 系统模式占用的 CPU 百分比 0.0 ni 改变过优先级的用户进程占用的 CPU 百分比 99.8 id 空闲 CPU 占用的 CPU 百分比 0.0 wa 等待输入/输出的进程占用的 CPU 百分比 0.0 hi 硬中断请求服务占用的 CPU 百分比 0.0 si 软中断请求服务占用的 CPU 百分比 0.0 st st(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比

4)第四行是物理内存信息:KiB Mem :1867048 total,1154048 free,299880 used,413120 buff/cache

  • 1867024 total : 物理内存的总量,单位为KB

  • 1243576 free:空闲的物理内存数量

  • 255592 used:已使用的物理内存数量

  • 367856 buff/cache:作为缓冲的内存数量

5)第五行是交换分区(swap)信息:KiB Swap: 3907580 total, 3907580 free, 0 used. 1363728 avail Mem

  • 3907580 total:交换分区(虚拟内存)的总大小,单位KB

  • 3907580 free:空闲交换分区的大小

  • 0 used.:已使用的交换分区的大小

  • 1363728 avail Mem:可用于进程下一次分配的物理内存数量

top命令输出内容——第二部分详解

image.png

top 命令的第二部分输出,主要是系统进程信息,各个字段的含义如下:

表头(字段名) 说明 PID 进程的 ID号 USER 该进程所属的用户 PR priority优先级,数值越小 优先级越高 NI nice优先级,数值越小 优先级越高 VIRT 该进程使用的虚拟内存的大小,单位为 KB RES 该进程使用的物理内存的大小,单位为 KB SHR 共享内存大小,单位为 KB S 进程状态 %CPU 该进程占用 CPU 的百分比 %MEM 该进程占用内存的百分比 TIME+ 该进程总共占用的 CPU 时间 COMMAND 进程的命令名(进程文件、进程名称)

tty终端

  • Centos7系统,tty1表示图形界面,tty2-tty6表示文字界面,可以用Ctrl+Alt+F1-F6切换;

  • pts说明是用远程工具连接的,比如xshell,后面的数字代表登录的时间顺序,越小证明登录的越早;

  • 查看线程 top -H;ps -T。

常用命令

命令 说明 P 以占据的CPU百分比,%CPU M 占据内存百分比,%MEM T 累积占据CPU时长,TIME+ l uptime信息 t tasks及cpu信息 m memory信息 q 退出命令 s 修改刷新时间间隔 k 终止指定进程 W 保存文件 1(数字) cpu分别显示

3.pgrep命令——查询进程的PID

根据特定条件查询进程的PID信息。

  • -U:指定用户

  • -l:显示进程名

  • -a:显示完整格式的进程名

  • -P < PID>:显示指定进程的子进程

示例

1)查询指定用户

image.png

2)显示进程名

image.png

3)显示完整格式的进程名

image.png