进程与计划任务管理

一、什么是程序?

  • 文件中静态保存的代码

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

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

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

二、什么是进程

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

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

  • 存在生命周期

  • 都由其父进程创建

三、进程具有的特征

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

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

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

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

四、进程的基本状态

  • 创建状态:进程在创建时需要申请一个空白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 来接管他,成为他的父进程。

示例

九、查看进程信息

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:显示所有终端的进程

示例

进程信息共有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:使用完整的格式显示进程信息

示例:

进程信息共有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 列名,列名,列名,列名

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

进程排序

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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命令输出内容------第二部分详解

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)查询指定用户

2)显示进程名

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

相关推荐
FoldWinCard6 小时前
D5 Linux 网络及端口命令
linux·运维·服务器
零涂毕业设计8 小时前
毕业设计模块开发-OLED显示屏(IIC协议0.96寸)STM32 ESP32 FPGA Linux驱动免费分享
linux·stm32·单片机·嵌入式·esp32·fpga·oled
tedcloud1238 小时前
OmniRoute怎么部署?开源AI模型路由平台Linux部署教程
linux·服务器·人工智能·开源·音视频
霸道流氓气质8 小时前
KMS 密钥管理服务(Key Management Service)原理与实践
linux·服务器·数据库
SakitamaX8 小时前
LVS(Linux Virtual Server)概念详解
linux·运维·lvs
小张同学a.8 小时前
Linux系统管理
linux·运维
阿龙的工作记录9 小时前
深入理解Linux设备驱动模型
linux·嵌入式硬件·工作记录
代码村新手9 小时前
Linux的基本指令
linux·运维·服务器
hkj88089 小时前
Ubuntu 切换java版本
java·linux·ubuntu
撩得Android一次心动11 小时前
Linux编程笔记3【个人用】
linux·笔记