一、什么是进程
1.通俗来讲,进程就是指计算机中正在运行的程序的实例,而进程既可以是程序代码,也可以是数据,还可以是系统资源等等。
2.每个进程都有自己独立的内存空间和系统资源,每个进程都拥有自己的执行上下文,而进程之间也可以通过操作系统提供的机制进行通信。
二、进程的状态
1.进程可大致分为五个状态
R(TAKS_RUNNING) 可执行态(running,ready)
S(TASK_INTRRUPTABLE) 可唤醒休眠
D(TASK_UNINTRRUPTABLE) 不可唤醒休眠
T(TASK_STOP) 暂停状态
Z(TASK_zombie) 僵死态
三、进程查看的方法
1.如何在图形中查看进程
打开
会发现类似于Windows的任务管理器
也可以利用代码来打开比如
2.常用的进程查看的命令
2.1首先是ps的命令,如下
ps 进程查看
ps 命令的三种执行风格:bsd unix GNU
ps后加上
a 与终端相关的进程(当用户登陆系统后产生的进程都是带终端的)
x 与终端无关相关的进程
u 用户信息归类的查看方式
f 进程层级关系
o 显示指定参数
pid comm nice pri pcpu ppid stat,user,group
-e 显示所有进程
-f 显示信息的完整格式
-H 显示进程的层级结构
-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 进程名称
其中,特别的,ps axo后输入你想看的内容则其只会显示出你输入的内容
如ps axo pid,%mem等
例,怎么找出系统内存占用量排在前五的,从大到小
命令:ps axo pid,%mem --sort=-%mem | tail -n 5 |tac
2.2pgrep的命令(用来过滤进程),如下:
pgrep后加上
-u uid 显示指定用户进程
-U user 显示指定用户进程
-t tty 显示指定终端进程
-l 显示进程名称
-a 显示进程的完整名称
-P 进程的子进程
2.3pidof命令,是用来查看vim的pid
接着是动态进程的查看
top命令,如下
top后加上
-d 指定刷新频率
-b 以批次方式显示
-n 指定显示的批次数量
单独的top命令后会显示以下内容
其中每个元素分别代表以下
PID 进程id
USER 进程所有者的用户名
PR 优先级
NI nice值,负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量,单位kb,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中的内容显示信息:
14:27:23 系统时间
up 1:00 运行时长
2 users 系统中有两个用户登陆
load average: 0.20, 0.05, 0.02
Tasks: 337 total 任务总量 1 running 正在运行 336 sleeping 休眠人物数量 0 stopped 被暂停数量 0 zombie 僵死人物数量
%Cpu(s) 0.3 us 用户空间 0.5 sy 内核空间 0.0 ni nice值调整时间 98.7 id 空闲时间 0.0 wa 等待io时间 0.5 hi 处理硬件中断时间 0.0 si 处理软件中断时间 0.0 st 被偷走的时间(vm使用时间) MiB Mem :7653.6 total, 总量 5742.6 free 空闲 1414.5 used 占用 770.7 buff/cache 缓存
top内部指令:
P cpu排序
M 内存排序
T 累计占用cpu时间排序
l 关闭/开启uptime信息
t 关闭/开启cpu&task
s 指定刷新频率
k 操作进程
u 查看指定用户进程
四、进程的前后台调用
1.首先是命令,如下:
ctrl+z 把占用shell的进程打入后台挂起
bg 把后台挂起的进程运行起来
fg 把后台进程调回前台
命令& 运行进程在后台
jobs 查看当前shell中在后台的所有工作
五、进程的优先级
1.每个进程都有一个优先级(priority)值,它决定了进程在系统中的调度顺序。简单讲。就是哪个重要就要先优先哪个,则给他优先级高。优先级越高的进程就越先被调度执行。
2.优先级的种类 分为:
2.1静态优先级:由用户或管理员在进程启动时或运行中手动设置,范围为 -20 (最高优先级)到 19 (最低优先级),数值越小优先级越高。
2.2 动态优先级:由内核根据进程的运行状态(如 CPU 使用时间、睡眠时长等)自动调整,以平衡系统资源分配。
3.静态优先级的命令,如下:
首先是优先级的范围,为范围: 0--139 内核自控优先级范围:0-99 用户可控优先级:100-139
其次是命令
nice -n -5 cat 指定优先级打开进程
renice -n -5 进程号 更改优先级
在这里可以调节优先级高低
nice值越负数,则优先级更高
可以利用watch -n 1 "ps ax -o pid,comm,nice,pri | grep gedit"来监控,使用命令更改优先级是就可以及时的观察。
注:必须要有进程在运行才可以监控其优先级
六、进程信号使用
1.进程信号的主要几个元素,如下:
SIGHUP 1 终止进程 终端断开连接时发送给与该终端关联的进程,常用于重新加载配置文件
SIGINT 2 终止进程 用户在终端按下 Ctrl+C 时发送给当前前台进程
SIGQUIT 3 终止进程并生成核心转储文件用户在终端按下 Ctrl+\ 时发送给当前前台进程
SIGTERM 15 终止进程 通常用于请求进程正常终止,是系统默认的终止信号
SIGKILL 9 强制终止进程不能被捕获、阻塞或忽略,用于强制终止无法正常响应的进程
SIGCONT 18 继续执行暂停的进程 用于恢复被暂停的进程
SIGSTOP 19 暂停进程 不能被捕获、阻塞或忽略,用于暂停进程的执行
SIGSTOP 20 暂停进程 可以被捕获、阻塞或忽略,用于暂停进程的执行
2.信号的特点
2.1可捕获、阻塞和忽略:像 SIGHUP 、 SIGINT 、 SIGTERM 这类信号,进程可以编写相应的信号处理 函数来捕获它们,也可以选择阻塞(暂时不处理)或者忽略这些信号。
2.2不可捕获、阻塞和忽略: SIGKILL 和 SIGSTOP 信号比较特殊,进程无法对其进行捕获、阻塞或忽 略操作,这保证了在必要时可以强制终止或暂停进程。
3.进程信号命令,如下:
kill 进程信号 pid 处理精确指定的进程
killall 进程信号 进程名字 按照进程名称批量处理进程
pkill 进程信号 进程条件 按照条件处理进程
先建立多个vim,利用killall -9 进程名字来处理完全部vim
再例如
用pkill命令
七、systemd守护进程
1.Systemd 是 Linux 系统中新一代的初始化系统(init system),它旨在替代传统的 SysVinit 和 Upstart 等初始化系统,除此之外,Systemd还提供了一套强大的工具和机制,用于管理系统的启动、服务的管理、资源的分配等。它的 设计目标是提高系统的启动速度、简化服务管理、增强系统的可靠性和可维护性。
2.守护进程特点
在后台运行:守护进程不会占用终端,不会受到用户登录或注销的影响,持续在后台执行任务。
生命周期长:一般从系统启动开始运行,直到系统关闭才停止,为系统提供长期稳定的服务。
无控制终端:守护进程没有控制终端,不会接收来自终端的输入,也不会将输出显示在终端上。
自成进程组和会话:守护进程通常会创建自己的进程组和会话,以确保独立于控制终端和其他进 程。
3.systemd守护进程命令
systemctl后加上
start 开启
stop 关闭
status 查看状态
reload 重新加载
restart 重新启动服务
enable 设定服务开机启动
enable --now 设定服务开机启动并当前开启服务
disable 设定服务开启不其动
list-units 查看系统所有服务当前状态
list-unit-files 查看服务开机状态
list-dependencies 列出服务依赖性
mask 冻结服务
unmask 解锁
set-default 设定系统运行模式 multi-user.target 无图形网络模式 graphical.target 有图形的网络模式 get-default 查看系统运行模式 系统运行模式 0-6 0 关机 1 单用户模式 2 无图形网络模式 3 无图形网络模式 4 无图形网络模式 5 图形网络模式 6 重启
我们可以通过这个命令来查看现在的默认启动级别是什么
我们也可以通过这个命令来看runlevel处于哪个启动级别
我们可以利用init后加上数字来更改启动级别
例如,init3进入到以下无图形界面
我们也可以利用
来更改默认的启动级别
我们也可以在开机界面
按e进入编辑模式
在quiet后加上想要更改的启动级别数字去更改