linux中的进程管理
- 一、进程和线程
- 1、进程
- 2、线程
- 二、进程查看命令(man ps)
- 1、图形查看进程
- 2、ps命令(用来查看进程信息)
- 1、bsd风格
- 2、unix风格
- 3、gun风格
- 3、pgrep和pidof 命令的用法
- 4、top 动态进程查看
- 三、系统优先级
- 四、进程前后台调用
- 五、进程信息号
- 六、守护进程
- 1、设定实验环境
- 2、利用守护进程控制服务
- 七、系统登录审计体系
- 1、w 显示正在登陆系统的账号
- 2、last 登陆成功现在已经退出的
- 3、lastb 试图登陆但未成功
一、进程和线程
1、进程
程序是静态的代码文件;进程是指程序运行时的形态
进程是程序的一个副本(复制程序到内存,相当于副本)
进程是有生命周期的
准备期:准备资源(类似于执行“打扫教室任务”前,“拿扫把”)
运行期:执行过程
终止期:执行后程序所占用的系统资源被回收
程序存在硬盘上,硬盘中的内容要先放到内存中进行缓存,才能被cpu读到,之后才能进行相应运算。
同样的,在内存中计算出的结果,要放到硬盘中进行永久保存。
2、线程
进程是资源调用的最小单位
线程是进程的最小单位
程序执行流是从上倒下贯穿运行的
当进程是多任务物,cpu是多核心,多任务应该同时被每个核心处理,每个核心处理的任务叫线程
线程资源是共享的。
进程状态
R(TASK_RUNNING) 可执行态(running,ready):正在被cpu处理,或已经加载好等待被cpu处理
S(TASK_INTRRUPTABLE) 可唤醒休眠:使用cpu超时,进入休眠,再次使用时需要被激活
D(TASK_UNINTRRUPTABLE) 不可唤醒休眠:使用cpu超时,仍有资源没有被加载好,不可以使用cpu,等待加载的时间段就是不可唤醒状态。
T(TASK_STOP) 暂停状态:暂停状态都是人为的在操作,人为的把一个程序暂停,关闭无法使用或暂时不需要的程序,可以人为唤醒
Z(EXIT_ZOMBLE) 僵死态:**进程已经结束,却占用资源不放,需要手动结束程序。**这是一种“bug”、是系统的漏洞。
二、进程查看命令(man ps)
1、图形查看进程
方法一:gnome-system monitor gnome:图形界面
方法二:或者在有图形的情况下,选择utilities-system monitor
但是在企业中一般不用。
2、ps命令(用来查看进程信息)
ps命令也是用来查看进程信息的,但不该命令不依赖于图形。在文本界面下就可以显示进程信息。
命令的三种执行风格 unix bsd GNU
所谓执行风格,就是一种书写规范:
Unix风格的参数,前面加单破折线;
BSD风格的参数,前面不加破折线;
GNU风格的长参数,前面加双破折线。
1、bsd风格
a | 与终端相关的进程(当用户登陆系统后产生的进程都是带终端的) |
---|---|
x | 与终端无关相关的进程 |
u | 用户信息归类的查看方式 |
f | 进程层级关系 |
o | 显示指定参数( pid comm nice pri pcpu ppid stat,user,group等) |
(1)ps #a 与终端相关的进程(当用户登陆系统后产生的进程都是带终端的)
我们可以看到tty这一列有三种tty1,tty1,pts/0,
先说pts/0吧,man里面是这样说的:ptmx and pts - pseudo-terminal master and slave,pts是所谓的伪终端或虚拟终端 (虚拟终端(VT)是一种提供类似于Internet的Telnet协议的远程终端仿真的国际标准化组织(ISO)协议。在远程终端的用户,可以在远程计算机上运行应用程序,就象他们是坐在这台计算机前面一样)。
具体表现就是你打开一个终端,这个终端就叫pts/0,如果你再打开一个终端,这个新的终端就叫pts /1,依此类推。
tty:终端设备的统称。
tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘与显示器取代,所以现在叫终端比较合适。终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。
tty1~6是文本型控制台,tty7是X Window图形显示管理器。
ps ax显示信息如下:
#PID 进程id(进程的唯一标识)
#TTY 进程用到的终端
#STAT 进程状态
#TIME 进程占用cpu时长
#COMMAND 进程名称
(2)ps #x 与终端无关相关的进程
当然ps -ax可以组合使用。
(3)ps u 用户信息归类的查看方式
#ps aux显示信息如下:
#USER 进程所有人
#PID 进程id
#%CPU 进程使用cpu的用量
#%MEM 进程所用到的内存用量
#VSZ 进程使用的虚拟内存大小,(进程在内存中的大小,以千字节(KB)为单位)
#RSS 进程常驻内存中的数据大小,(进程在未换出时占用的物理内存)
#TTY 进程用到的终端
#STAT 进程状态
#START 进程运行时长
#TIME 进程占用cpu时长
#COMMAND 进程名称
(4)ps f 进程层级关系
(5)ps o user,pid,gid等 (显示指定参数)
2、unix风格
-e | 显示所有进程 |
---|---|
-f | 显示信息的完整格式 |
-H | 显示进程的层级结构 |
-o | 显示指定参数 |
–sort= |
(1)、ps -e显示所有进程
等同于ps ax
(2)、ps -f 显示信息的完整格式
可以看到后面的参数
(3)、ps -H 显示进程的层级结构
(4)、ps -o 显示指定参数(和ps o 一样)
(5)、–sort=
ps -eo %cpu --sort=%cpu 正序排列
ps -eo %cpu --sort=-%cpu 倒序排列
(6)、ps -l 查看自己bash进程
3、gun风格
3、pgrep和pidof 命令的用法
(1)、pgrep命令
pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。
通过程序的名字来查询进程的工具,一般是用来判断程序是否正在运行。
-u uid/user | 显示指定用户进程 |
---|---|
-U user | 显示指定用户进程 |
-t tty | 显示指定终端进程 |
-l | 返回进程ID同时显示进程名 |
-a | 显示进程的完整名称 |
-P pid | 进程的子进程 |
(1)、-u uid 显示指定用户进程
进入westos用户后 打开两个shell
(2)、-U user | 显示指定用户进程
(3)、-t tty |显示指定终端进程
(4)、-a | 显示进程的完整名称
注意:关于pgrep的命令,一定要牢记此命令是通过进程名称来查询进程的工具,一般是用来判断程序是否正在运行。
所以除了-u和-U后面跟的是用户名称或uid;
其他的参数都是跟进程名称,比如:
(2)、pidof 命令
根据进程名称来查看进程id。
4、top 动态进程查看
(1)、#top -
#09:48:51 系统时间
#up 18:54 运行时长
#2 users 系统中有两个用户登陆
#load average: 0.75, 0.53, 0 Load Average 就是一段时间 (1 分钟、5分钟、15分钟) 内平均 等待时长就是进程等待被cpu处理的时间。
(2)、#Tasks:
#331 total 任务总量
#3 running 正在运行
#329 sleeping 休眠人物数量
#0 stopped 被暂停数量
#0 zombie 僵死人物数量
(3)、#%Cpu(s)
#1.5 us 用户空间
#1.9 sy 内核空间
#0.0 ni nice值调整时间
#58.9 id 空闲时间
#0.0 wa 等待io时间
#2.1 hi 处理硬件中断时间
#0.2 si处 理软件中断时间
#0.0 st被偷走的时间(vm使用时间)
(4)、#MiB Mem :
#7664.6 total 总量
#5383.9 free 空闲
#1312.1 used 占用
#968.8 buff/cache 缓存
从硬盘里面加载数据到内存,这种数据叫缓冲 (buff)
将要从内存到硬盘中的数据 叫缓存。
(5)、MiB Swap: 交换分区用量
交换分区在硬盘上。
#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 命令名/命令行
(6)、top命令的参数
-d | 指定刷新频率 |
---|---|
-b | 以批次方式显示 这个得和d、n搭配使用,他是按批次显示 每三秒都是开一个新的静态top 一直往下走 |
-n | 指定显示的批次数量 比如top -n 2 显示两次以后就停止 |
(7)、top内部指令
#P 排序
#M 内存排序
#T 累计展铜cpu时间排序
#l 关闭/开启uptime信息
#t 关闭/开启cpu&task
#s 指定刷新频率
#k 操作进程
#u 查看指定用户进程
三、系统优先级
系统时多任务多用户的操作模式
任务的重要性是有区分的
如何确定任务的重要性
---->使用“优先级”
范围: 0–139
内核自控优先级范围:0-99
所以用户可控优先级:100-139
nice:-20-19
普通用户只能调低自己的优先级而不能调高。
所谓nice值,就是我们的用户发扬风格,把自己能够使用到的系统资源调低,使别人能够运行的更快。
nice值越负,优先级越高。所以普通用户只能把自己的nice值调大。
(1)更改进程nice值
renice -n -5 43331 ##更改优先级
nice -n -5 cat ##指定优先级打开进程
S #sleeping
< #优先级高
s #顶级进程
T #stop(当前状态是一个暂停状态)
N #优先级低
R #running
‘+’ #运行在前台
那为什么cat后面没有显示小s?因为他是某一个程序的子进程。
(2)、kill进程
(3)、开启进程并指定其优先级
nice -n -5 cat &
在开启程序时就指定它的优先级。后台运行。
四、进程前后台调用
有些进程在使用的时候,是占用系统终端的一个状态。比如:gedit
此时,系统终端已经不能在和我们进行正常交流,那如何解决?
涉及到的命令:
ctrl+z ##把占用shell的进程打入后台挂起
bg ##把后台挂起的进程运行起来
fg ##把后台进程调回前台
& ##运行进程在后台
jobs ##查看当前shell中在后台的所有工作
(1)、ctrl+z 把占用shell的进程打入后台挂起
会显示stopped 暂停状态。
后面的”+“表示,我在操作的过程中,默认就是使用这条命令。
后面的”-“表示,稍后要处理的进程
(2)、fg 把后台进程调回前台
把(1)中的进程打入后台挂起以后,就不能在操作gedit页面。如何解决?使用fg。
输入fg,就是带”+“的被调回前台。
输入fg 【num】(jobs中的数字)就是调用指定进程进入前台。
(3)、bg 使进程在后台运行
问题:能让cat在后台自动运行起来吗?
cat在后台运行的时候 会自动进入到暂停状态
因为cat需要有字符的输入才能生效,cat在开启的时候需要开启自己的工作界面,如果不具备这样的界面控制能力的话,证明他的资源是缺失的。
如下图可知,cat确实在后台运行的过程,但是运行完毕以后又立即被系统停止了。
同理,vim也和cat一样,也需要一个自己的工作界面。
(4)、& 直接使进程在后台开启。
这样可以正常和系统终端交流
(5)、结束在后台的进程
fg 把它调回前台,使用完毕以后 正常结束掉
比如vim
cat的话 ctrl+c 结束掉也可以
或者kill -9 【num】 (num是jobs中的编号)
五、进程信息号
引言:
对进程的处理,就是对内核进行控制。
操作者要使用信号对内核进行沟通,让他对相应的进程进行处理。
内核也用信号对进程进行沟通,把数字传递给进程以后,让进程自己去处理。
(1)、man 7 signal 查看进程信息号
(2)、进程信号
1 #重新家在系统配置文件(source)
2 #清空内存中的进程数据
3 #清空内存中的鼠标(ctrl+)
9 #强行结束进程(不能被阻塞)
15 #正常关闭进程(会被阻塞)
18 #运行被暂停的进程
19 #暂停进程(不会被阻塞)
20 #暂停进程(会被阻塞的)
(3)、实验部分:
①kill -2
第一行的字母我们不要的话可以使用ctrl+c 推出
实际上使用kill -2 就是ctrl+c
②kill -15正常关闭进程
在shell中开启子进程,使用-15并不会关掉前面那个shell,
这是因为命令被系统阻塞掉了,因为系统认为做了这样的操作以后会对系统造成不良影响。
当然也可以使用kill -9 强制关闭。
③19 #暂停进程(不会被阻塞)
20 #暂停进程(会被阻塞的)
4658的shell 已经不能正常交互
只有kill -18 4658 运行之后 才能交互
kill -20 会被阻塞
2、进程信号控制工具
kill 进程信号 pid
killall 进程信号 进程名字
pkill 进程信号 进程条件
kill不做过多解释。
(1)、kill all 进程信号 进程名字
当shell中后台开启多个vim,怎么才能一次性把这些vim都关掉。
(2)、pkill 进程信号 进程条件
经常使用 pkill -U 进程信号 进程条件
就是关闭指定用户进程
进程信号可以在pkill --help中参考。
六、守护进程
把程序的管理权交给某一个进程,从而分担内核的压力。
而这个进程,我们就可以把他称作守护进程。
守护进程:替内核分担程序控管的程序
#通常pid为1
就是上图所示的systemd
systemd -----> systemctl
Systemd(系统管理守护进程)
systemctl命令 (系统管理服务) systemd这个启动服务的机制,主要通过systemctl这个命令来完成。
1、设定实验环境
我们的主机位置是172.25.254.50
所以设定另一台主机(虚拟机)的设备是172.25.254.150
对虚拟机网络进行配置,为接下来的操作做准备。
2、利用守护进程控制服务
所谓服务,就是对操作者以外的人是有意义的。
比如,上课用的远程连接服务,对老师是没有意义的,但是对于上视频课的人是有意义的。
这种雷锋程序,就叫服务。
#systemd -----> systemctl
#systemctl 管理系统服务
#服务指在系统中开启的共享系统资源到网络中的程序
(1)、status ##查看状态
(2)、stop ##关闭
(3)、start ##开启
(4)、restart ##重新启动服务
相当于先stop再start
为什么要重启,因为如果对程序做了相应的设定,那目前为止是不生效的,只有重启之后才生效。
重启之后 。main pid会发生变化。
(5)、reload ##重新加载
在配置进程以后,不关闭进程,而是直接加载。
有的进程支持,有的进程不支持。
比如ssh就不支持。
而httpd就支持,这是服务本身决定的。
(6)、enable
enable ##设定服务开机启动
enable --now ##设定服务开机启动并当前开启服务
disable ##设定服务开启不其动
只使用disable,当前还是running状态
使用了disable --now 就关闭了
使用systemctl enable sshd 就是设置其开机启动。
(7)、list-units ##查看系统所有服务当前状态
(8)、list-unit-files ##查看服务开机状态
图中,static表示的是固定的,不需要去管,这种服务通常都是其他服务运行的依赖性。
(9)、list-dependencies ##列出服务依赖性
就是我们再开启一个服务的时候,另一个服务会因为当前服务的开启而自动打开,不需要人为进行管理。
(10)、mask ##冻结服务
unmask ##解锁
之前我们可以使用stop和start进行开启关闭服务
在冻结之后,stop和start就不再起作用。
(11)、 set-default ##设定系统运行模式
set-default multi-user.target 无图形网络模式
set-default graphical.target 有图形的网络模式
get-default ##查看系统运行模式
##系统运行模式
#0-6
#0 POWEROFF(关机)
#1 single
#2 noG+NETWORK
#3
#4
#5 G+NETWORK
#6 REBOOT(重启)(调用命令 init 6)
无图形的网络模式就是黑的界面。运行速度会更快。
七、系统登录审计体系
1、w 显示正在登陆系统的账号
w 显示正在登陆系统的账号
w -i 显示登陆来源
上面两个命令显示的其实是/var/run/utmp 这个文件,这两个文件不能使用cat进行查看。
此时主机也显示连接到了 当前虚拟主机上。
2、last 登陆成功现在已经退出的
last ##登陆成功现在已经退出的
该命令查看的是 /var/log/wtmp这个文件
真机退出连接后,图上图所示
3、lastb 试图登陆但未成功
lastb ##试图登陆但未成功
该命令查看的是/var/log/btmp这个文件
真机显示连接时密码错误
虚拟主机就会显示登陆失败的主机: