一、1.什么是进程
进程是pc被人为调用开启了程序后把硬盘当中的代码复制到内存中让cpu通过代码调用需要处理的数据,在进行相应的处理并且将处理过后的数据保存到硬盘当中的过程叫做进程。
进程是程序运行的一个形态,是程序的一个副本。 进程是有生命周期的(准备期,运行期,终止期)
每个进程都有自己独立的内存空间和系统资源
2.什么是线程
线程是进程中的一个执行单元,也就是说进程的最小单位是线程。
一个进程可以包含多个线程,这些线程
共享
进程的内存空间和系统资源。
每个线程之间都有自己独立的栈空间和程序计数器,线程之间可以一同进行,以此来提高进程执行效率。
二、进程状态
R(TAKS_RUNNING) 运行态(
running(正在运行)
,
ready(准备运行)
)
S(TASK_INTRRUPTABLE) 可唤醒休眠
D(TASK_UNINTRRUPTABLE) 不可唤醒休眠(缺少运行条件)
T(TASK_STOP) 暂停状态
Z(TASK_zombie) 僵尸态(程序运行完了之后,cpu还在被占用中(人为))
三、进程的查看方法
1.在图形中查看进程
如下图:在应用程序中打开工具中的系统监视器或者用gnome-system-monitor 命令进行调用

2.常用的查看进程命令
(1)ps命令的用法
以下的命令是BDS风格
pa a #表示当前终端中正在运行的进程,即与终端相关的进程
实验如下:创建进程gedit前并没有此进程,之后就出来了
之后的实验可以用监控命令:
ps x #不在当前终端运行的进程,即与当前终端无相关
ps ax #显示系统的所有进程
实验如下:其中PID:进程ID TTY:进程调用的字符设备 STAT:进程状态
TIME:进程占用CPU的总时长 COMMAND:进程名字

ps u #表示对用户的信息进行归类
实验如下:其中USER:进程所有人 %CPU:CPU使用量 %MEM:内存使用量
VSZ:虚拟内存使用量 RSS:常驻内存使用量 START:什么时间开启的
ps f #表示进程的层级关系
实验如下:PID4038是3826的子进程,因为它是在3826进程中运行的

ps o xxx #显示指定参数,但要在o后面加你想要看的参数(可加参数如下)
# pid comm nice pri pcpu ppid stat,user,group,%mem。%cpu
pri:优先级
nice:nice值
pcpu:副级进程cpu
ppid:副级进程的pid
实验如下:(举几个例子如下)



以下的是Unix风格
ps -e #与ps ax一样表示所有进程
实验如下:

ps -f #表示查看信息的完整格式
实验如下:

ps -H #-H 显示进程的层级结构,类似于前面的ps f
ps ax --sort=xxx #表示对所有进程以xxx为进行排序的依据
实验如下:


可以看到它是以cpu的使用量进行的一个正序,如果想要倒序的话可以在--sort=%cpu的%前加-
其他同理
总结:
ps a 与终端相关的进程(当用户登陆系统后产生的进程都是带终端的)
ps x 与终端无关相关的进程
ps u 用户信息归类的查看方式
ps f 进程层级关系
ps o 显示指定参数如:pid comm nice pri pcpu ppid stat user group
ps -e 显示所有进程
ps -f 显示信息的完整格式
ps -H 显示进程的层级结构
ps -o 显示指定参数
#--sort=
ps ax显示信息如下:
PID:进程id
TTY:进程用到的终端
STAT:进程状态
TIME:进程占用cpu时长
COMMAND:进程名称
ps aux显示信息如下:
USER:进程所有人
PID:进程id
%CPU:进程使用cpu的用量
%MEM:进程所用到的内存用量
VSZ:进程使用的虚拟内存大小
RSS:进程常驻内存中的数据大小
TTY:进程用到的终端
STAT:进程状态
START:进程运行时长
TIME:进程占用cpu时长
COMMAND:进程名称
(2)pgrep命令的用法
它是用来过滤进程的
pgreo -U xxx #表示找出xxx的相关进程,xxx是进程名字
实验如下:我们创建了两个用户进程,通过命令将其显示出来

pgrep -u xxx ##表示找出xxx的相关进程,xxx是进程ID
所有相关命令如下:
pgrep
-u uid:显示指定用户进程
pgrep
-U user:显示指定用户进程
pgrep
-t tty:显示指定终端进程
pgrep
-l:显示进程名称
pgrep
-a:显示进程的完整名称
pgrep
-P:进程的子进程(P后面接进程ID)
pidof 进程名称 ##查看进程的pid
实验如下:

(3)top命令的用法
它表示的是动态查看,而前面的都是静态查看。
默认情况下数据3s变一次。

top
中的内容显示信息
10:41:15 :表示的是系统时间
up 1:59 :表示运行时长
2 users:表示系统有两个用户登录,即有两个用户正在被使用
load average: 0.00, 0.06, 0.09:系统的负载(分别表示1、5、15分钟以内平均排队的时长)
Tasks: 348 total:表示一共有多少进程,即任务总量
1 running:1个正在运行
347 sleeping:347个处于休眠状态
0
stopped:0个被暂停
0 zombie:0个处于
僵死状态
%Cpu(s):表示cpu使用时间
0.1 us:表示用户空间
0.2 sy:表示系统使用cpu时间,即内核空间
0.0 ni:nice值调整时间
99.5 id:表示空闲时间
0.0 wa:等待io时间
0.1 hi:处理硬件中断时间
0.0 si:处理软件中断时间
0.0 st:被偷走的时间(即当前虚拟机占用cpu的使用时长)
7653.7 total:内存总量
5613.9 free:空闲的内存大小
1542.6 used:被使用的内存大小
788.2 buff/cache:缓存的的内存大小(buff表示要保存到硬盘里的数据;cache表示从硬盘里读取的数据)
MiB Swap:虚拟内存的调用
512.0 total:内存总量
512.0 free:空闲
0.0 used:使用
6111.1 avail Mem:可用内存
PID:
进程
id
USER:
进程所有者的用户名
PR:
优先级
NI:nice
值(是优先级的一种表示方式)
VIRT:
进程使用的虚拟内存总量,单位
kb。(即Swap信息
)
VIRT=SWAP+RES
RES:
进程使用的、未被换出的物理内存大小(即常驻内存),单位
kb
。
RES=CODE+DATA
SHR:
共享内存大小,单位
kb。
S:
进程状态
(D=
不可中断的睡眠状态
,R=
运行
,S=
睡眠
,T=
跟踪
/
停止
,Z=
僵尸进
程
)
%CPU:
上次更新到现在的
CPU
时间占用百分比
%MEM:
进程使用的物理内存百分比
TIME+:
进程使用的
CPU
时间总计,单位
1/100
秒
COMMAND:进程名
top外部的命令:
实验如下:top变为了1s刷新一次

top -n xxx #给定只刷新xxx次
实验如下:top1s刷新一次,一共就刷新6次

top -b #只显示进程信息,不显示系统信息
实验如下:


top内部的快捷键:
P:cpu
排序
运行前:
运行后:
M:内存排序
运行前:
运行后:
T:累计占用
cpu
时间排序
运行前:
运行后:
l:
关闭
/
开启
uptime
信息
运行前:
运行后:
t:
关闭
/
开启
cpu&task
s:
指定刷新频率
k:
操作进程进行结束
运行前:
运行后:输入id 5057,再输入9结束进程
u:
查看指定用户进程
四 进程的前后台调用
<ctrl>+<z> 把占用shell的进程打入后台挂起
运行前:
运行后:
bg 把后台挂起的进程运行起来
fg 把后台进程调回前台
命令& 运行进程在后台
jobs 查看当前shell中在后台的所有工作
五 进程的优先级
1.进程优先级定义
进程优先级(
Process Priority
)是
Linux
内核用于决定
CPU
资源分配的关键指标
优先级越高的进程越有可能被
CPU
优先调度执行
2.优先级的种类(优先级范围:0~139)
它分为静态优先级与动态优先级
静态优先级(100~149):由用户或管理员在进程启动时或运行中手动设置,范围为 -20 (最高优先级)到 19 (最低优先级),数值越小优先级越高。
动态优先级(0~99是内核对其进行调整)
:由内核根据进程的运行状态(如
CPU
使用时间、睡眠时长等)自动调整,以平衡系统资源分配。
优先级用nice值进行调整,但只能调整静态优先级
调整nice值,用到命令renice
实验如下:


六 、进程信号
1.进程信号的定义
在
Linux
系统中,进程信号(
Process Signal
)是一种软件中断机制,用于在进程之间传递异步通知。它为系统提供了一种处理异常情况、实现进程间通信的简单方式。信号可以由系统内核、其他进程或者用户手动发送给目标进程,当进程接收到信号时,会根据信号的类型执行相应的操作,如终止进程、暂停进程、忽略信号等。
2.用户可控进程信号


信号特点
可捕获、阻塞和忽略
:像
SIGHUP
、
SIGINT
、
SIGTERM
这类信号,进程可以编写相应的信号处理函数来捕获它们,也可以选择阻塞(暂时不处理)或者忽略这些信号。
不可捕获、阻塞和忽略
:
SIGKILL
和
SIGSTOP
信号比较特殊,进程无法对其进行捕获、阻塞或忽略操作,这保证了在必要时可以强制终止或暂停进程
进程信号相关指令:
kill 进程信号 pid 处理精确指定的进程
killall 进程信号 进程名字 按照进程名称批量处理进程
pkill 进程信号 进程条件 按照条件处理进程
七、 systemd守护进程
守护进程的定义:
守护进程(Daemon)是一种在后台持续运行的特殊进程,它不与终端直接交互,通常在系统启动 时自动启动,并在系统关闭时才停止。其目的是为系统提供各种服务为其他进程和用户提供支持,确保系统的正常运行。
特点:
在后台运行
:守护进程不会占用终端,不会受到用户登录或注销的影响,持续在后台执行任务。
生命周期长
:一般从系统启动开始运行,直到系统关闭才停止,为系统提供长期稳定的服务。
无控制终端
:守护进程没有控制终端,不会接收来自终端的输入,也不会将输出显示在终端上。
自成进程组和会话
:守护进程通常会创建自己的进程组和会话,以确保独立于控制终端和其他进
程。