RH124-Linux中的进程管理

Linux中的进程管理

一.进程定义:

1.进程的定义:

总的来说,进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础:
[1]程序是静态的代码文件。
[2]进程是指程序运行时的形态。
[3]进程是程序的一个副本。
[4]进程是有生命周期的(准备期,运行期,终止期)。

2.进程和线程:

总的来说,线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。则:
[1]进程是资源调用的最小单位。
[2]线程是进程的最小单位。
[3]程序执行流是从上倒下贯穿运行的 。
[4]进程是多任务物,cpu是多核心,多任务应该同时被每个核心处理,每个核心处理的任务叫线程。
[5]线程资源是共享的.。

3.进程状态:

进程状态 含义
R(TASK_RUNNING) 可执行状态(running,ready)
S(TASK_INTERRUPTABLE) 可唤醒休眠
T(TASK_UNINTERRUPTABLE) 不可唤醒休眠
D(TASK_STOP) 暂停态
Z(EXIT_ZOMBIE) 僵死态

用食堂大妈打饭这个事件可以形象地理解进程状态,若将打饭这个动作看作执行:
[1]R:食堂打饭已准摆好盘子和饭卡,排队等待阿姨打饭
[2]S:打饭的时候在旁边纠结选哪个菜,阿姨让你先站在旁边等着,等你选好了就可以排队等待阿姨打饭了
[3]T:打饭的时候没有带饭卡,阿姨让你站队伍旁边但是你却不能进行打饭这个操作
[4]D:视频的暂停键
[5]Z:打完饭后由于跟阿姨聊天而导致占了别人的打饭队伍,一直占用着系统资源不放,需要手动清除bug

二.进程命令查看:

1.图形进程查看工具:

命令 效果
gnome-system-monitor 图形进程查看工具

执行命令后的界面:
在这里插入图片描述
图片左边所示的就是图形进程查看工具
Dependencies:依赖性,可以形象地用打饭这个程序,每个人都必须要带碗来理解

2.进程查看:

ps命令可以对于系统中的进程进行查看,其中ps命令下包含了三种执行风格,分别是UNIX,BSD,GNU,用man ps可以看到三种执行风格的差异,实际执行ps命令时三种风格的参数是可以混用的:
在这里插入图片描述

ps命令 效果
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 显式指定参数
ps --sort= 按一定标准以及顺序排序

[1]ps a:与终端相关的进程:
在这里插入图片描述
[2]ps x:与终端无关的进程:
在这里插入图片描述
ps ax可以显示所有进程:
在这里插入图片描述
[3]ps u:用户信息归类的查看方式:
在这里插入图片描述
ps aux可以显示所有进程但与ps ax显示的信息不同:
在这里插入图片描述
[4]ps f:进程的层级关系:
在这里插入图片描述
用ps axf可以显示所有进程的层级关系:
在这里插入图片描述
[5]ps o:显示指定参数pid,comm,nice,pri,pcpu,ppid,stat,user,group,各个参数的输入顺序可以颠倒并且可以单独输入,参数之间相互独立互不影响:
在这里插入图片描述
[6]ps -e:显示所有进程:
在这里插入图片描述
[7]ps -f:显示信息的完整格式:
在这里插入图片描述
[8]ps -H:显示进程的层级结构:
在这里插入图片描述
[9]ps -o:显式指定参数:
ps -eo %cpu指按进程使用cpu的用量来显示所有进程:
在这里插入图片描述
[10]ps --sort==:按一定顺序显示进程信息:
在这里插入图片描述
其中以按进程使用cpu的用量来显示:ps -eo %cpu --sort==%cpu是按进程使用cpu从少到多的顺序显示的,ps -eo %cpu --sort==-%cpu是按进程使用cpu从多到少的顺序来显示的:
在这里插入图片描述
在这里插入图片描述
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 进程名称

在这里插入图片描述

3.进程过滤:

pgrep命令可以对于进程进行过滤:

命令 效果
pgrep -u uid 显示指定用户的进程
pgrep -U user 显示指定用户的进程
pgrep -t tty 显示指定终端的进程
pgrep -l 显示进程的名称
pgrep -a 显示进程的完整名称
pgrep -P 显示进程的子进程

[1]-u uid:显示指定用户的进程;-U user:显示指定用户的进程:在这里插入图片描述
由实验现象可得运行结果均为34680,对应ps运行结果中的进程bash,因此可得pgrep过滤出的结果为PID
[2]-t tty:显示指定终端的进程;-l:显示进程的名称;
-a:显示进程的完整名称:
在这里插入图片描述
由上一个实验得知tty为pts/0,则运行-t可得当前进程的PID,运行-lt显示PID和进程名称,运行-alt显示PID和完整名称,如上图所示
[3]-P:显示进程的子进程:
在这里插入图片描述
在-alt的基础上查看子进程,并在ps axf中找到对应PID下的进程就可以得到验证。

4.查看进程的PID:

命令 效果
pidof 查看进程PID

在这里插入图片描述

5.动态进程查看:

top命令可以对进程进行动态查看:
top命令默认初始界面:
在这里插入图片描述 [1]第一行:top - 08:18:27 是系统时间,up 13:45 是运行时长,1 user 是当前系统中有1个用户,load average:0.07 0.05 0.01对应1min,5min,15min
[2]第二行:Tasks:324 total 是任务总量,5 running是正在运行,319 sleeping是休眠任务数量,0 stopped被暂停数量,0 zombie是僵死任务数量
[3]第三行:%Cpu(s)中21.6 us是用户空间,5.1 sy是内核空间,0.0ni是nice值调整时间,72.6 id是空闲时间,0.0 wa是等待io时间,0.7 hi是处理硬件中断时间,0.0 si是处理软件中断时间,0.0 st是被偷走的时间(vm使用时间)
[4]第四行:MiB Mem中1800.6 total是总量,194.7 free是空闲,1239.3 used是占用,366.6 buff/cache是缓存
[5]第五行:MiB Swap(交换分区用量)

top外部命令:

命令 效果
top -d 数字 指定刷新频率
top -b 以批次方式显示
top -n 数字 以指定批次方式显示

[1]top -d:执行top -d 1(刷新频率为1秒1次):
在这里插入图片描述
[2]top -b/top -n 数字:以批次显示:
在这里插入图片描述
top内部命令:即先执行top后在top程序内部执行相关命令:

命令 效果
P cpu排序
M 内存排序
T 累计占用时间排序
l 关闭/开启uptime信息
t 关闭/开启cpu&task
s 指定刷新频率
k 操作进程(需要提前知道被操作进程的PID)
u 查看指定用户进程

[1]P:cpu排序
在这里插入图片描述
[2]M:内存排序
在这里插入图片描述
[3]T:累计占用时间排序
在这里插入图片描述
[4]l:关闭/开启uptime信息
在这里插入图片描述
可以对比top程序界面,发现最上面一行消失。
[5]t:关闭/开启cpu和task
在这里插入图片描述
可以对比top程序界面,发现二,三行消失。
[6]s: 指定刷新频率
在这里插入图片描述
[7]k:操作进程:
首先打开另一个shell并执行命令vim,后在另一个shell中得到vim的pid,在按k后输入pid
在这里插入图片描述
enter后显示操作信号,输入操作信号15
在这里插入图片描述
操作后的结果就是将进程vim关闭
在这里插入图片描述
[8]u:查看指定用户进程
另开一个shell后登录其他用户并执行一个watch,在top中按u后输入该用户的名称
在这里插入图片描述
enter后就能看到该用户现在在执行的进程
在这里插入图片描述
若按u后不加任何用户名称,则系统默认为所有用户,所以top界面将回到默认初始界面。

三.进程优先级:

1.进程优先级:

[1]系统是多任务多用户的操作模式,任务的重要性是有区分的,如何确定任务的重要性?–优先级
[2]“优先级”范围: 0–139
[3]内核自控优先级范围:0-99
[4]用户可控优先级:100-139
[5]nice在Linux中的值范围是:-20-19,值越小,级越高;pri在Linux中的值的范围是:39-0,值越大,级越高,且nice和pri都是用户可控的优先级范围

2.进程优先级修改命令:

命令 效果
renice -n -5 进程id 将该进程优先级更改至5
nice -n -5 cat 指定优先级并打开进程

[1]renice执行时首先要用ps o comm,pri,nice,pid,stat查看进程对应pid,pri,ni后进行操作:
在这里插入图片描述
[2]nice:
在这里插入图片描述

3.进程优先级显示:

符号 含义
S sleeping
< 优先级高
s 顶级进程
T stop
N 优先级低
R running
+ 运行在前台

在这里插入图片描述

四.进程前后台调用:

命令 效果
ctl+z 把占用shell的进程打入后台挂起
bg 把后台挂起的进程运行起来
fg 把后台挂起的进程调回前台
& 运行进程在后台
jobs 查看当前shell中在后台的所有工作

整体实验:
在这里插入图片描述
分部实验:
[1]首先先执行gedit,再用ctl+z将gedit打入后台挂起,后用jobs查看,发现gedit无法编辑:
在这里插入图片描述
[2]然后用fg 1将gedit从后台挂起的状态调回前台,并且此时gedit可以进行编辑:
在这里插入图片描述
[3]再用ctl+z将gedit打入后台,用bg 1将gedit运行起来,但此时对应gedit状态有 & 显示,表明gedit运行程序在后台:
在这里插入图片描述
[4]实验结束时用ctl+c将gedit关闭,若用vim程序作为实验素材,则最后关闭用q,q!,wq,wq!退出vim模式即可。

五.进程信号信息:

1.进程信号:

信号 效果
1 重新加载系统配置文件
2 清空内存中的进程数据
3 清空内存中的鼠标(ctrl+)
9 强行结束进程(不能被阻塞)
15 正常关闭进程(会阻塞)
18 运行被暂停的进程
19 暂停进程(不会被阻塞)
20 暂停进程(会被阻塞)

2.进程信号控制工具:

命令
kill 进程信号 PID
killall 进程信号 进程名字
pkill 进程信号 进程条件

实验时加你个进程信号控制工具与进程信号配合实验:
在这里插入图片描述
信号9和信号15都可以关闭进程,信号9更加强制,信号15关闭正常进程可以,但是对于被打入后台挂起的gedit进程则无法关闭
在这里插入图片描述
对于信号19和信号20,都可以暂停,但是信号19暂停时在上图所示左边的shell中依然可以输入,但是不会显示,在右边shell中用信号18开启显示后会看到刚才在暂停期间输入的指令,而信号20的阻塞会使在暂停中无法将输入的指令记录,因此在信号18开启显示以后也无法显示刚才暂停期间新输入的指令。

六.systemd守护进程:

1.远程操作主机:

ssh命令可以远程操作主机:

命令
ssh -l 远程主机用户 远程主机ipadress

本实验环境是两个虚拟机,一个ipaddress为172.25.254.100,另一个为172.25.254.200,两个虚拟机之间相互连接:
在这里插入图片描述
如图所示,本实验是从172.25.254.100连接到172.25.254.200上,在实验中要通过ifconfig来查看当前用户的ipaddress,在执行ssh命令时,需要知道并输入被登录用户的密码,并且在首次登录时需要用yes/no回答系统问题。

2.守护进程:

守护进程:替内核分担程序控管的程序,通常PID为1,systemd–>systemctl,systemctl为管理系统服务,服务指在系统中开启的共享系统资源到网络中的程序。cs指client–server

3.systemctl命令用法:

命令 效果
start 开启
stop 关闭
status 查看状态
reload 重新加载
restart 重新启动服务
enable 设定服务开机启动
enable --now 设定服务开机启动并当前开启服务
disable 设定服务开启不启动
list-units 查看系统所有服务当前状态
list-unit-files 查看服务开机状态
list-dependencies 列服务依赖性
mask 冻结服务
unmask 解锁

[1]start和stop,以及用status查看当前状态:
在这里插入图片描述
用status查看当前状态界面如上图所示,使用start命令后系统状态变为active(runnning),使用stop后状态变为inactive(dead)
在start状态下可以发现,两个虚拟机之间可以用ssh可以正常登录:
在这里插入图片描述
在这里插入图片描述
若将状态更改为stop,则不能用ssh登录,会显示登录失败:
在这里插入图片描述
在这里插入图片描述
[2]reload和restart:
在这里插入图片描述
在这里插入图片描述
reload和restart有相似之处也有不同之处,reload和restart都能刷新sshd的状态,但是reload不会改变ip,restart会刷新ip,等于reload相当于游戏中的不停服的更新,而restart相当于游戏中的停服更新
[3]enable和disable:
在这里插入图片描述
[4]list-units,list-unit-files,list-dependencies:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
[5]mask和unmask:
在这里插入图片描述
sshd用mask锁定以后用状态查看时,会显示当前状态为已锁定状态,而用unmask解锁后状态会显示正常状态
在这里插入图片描述
用mask锁定后将无法修改其状态,status显示当前状态为已锁定,关闭状态,再用start命令去使其开启就会报错,显示更改失败。
用set-default可以设定系统运行模式:

命令 效果
set-default multi-user.target 无图形网络模式
set-default graphical.target 有图形网络模式

用get-default可以查看系统运行状态:

数字 效果
0 POWEROFF
1 single
2 noG+NETWORK
3 noG+NETWORK
4 noG+NETWORK
5 G+NETWORK
6 REBOOT

set-default和get-default的实验对应进行:
在这里插入图片描述

七.系统中的登录审计:

命令 效果
w 显示正在登录系统的账号
w -i 显示正在登录系统的账号及其登录来源
last 显示登录成功但现在已经退出了的账号
lastb 显示试图登录但未成功的账号

[1]用172.25.254.100登录172.25.254.200,并在172.25.254.200中可以清晰地看到当前172.25.254.100正在登录当中:
在这里插入图片描述
[2]last可以查看成功的登陆记录,lastb可以查看不成功的登录记录:
在这里插入图片描述
用last命令可以清晰地看到172.25.254.100用户成功登录的次数和登录时间等,同时在实验时在172.25.254.100用户登录时故意输错密码三次,在172.25.254.200中用lastb就可以看到172.25.254.100有三次失败的登录记录。
w,last,lastb三个命令分别将其信息存储在不同的文件中:

命令 对应文件
w /var/run/utmp
last /var/log/wtmp
lastb /var/log/btmp

实验时可以用输出重定向清空文件内容,也可以删除文件,删除后记得新建一个原文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46702804/article/details/112758267