大数据讲课笔记1.4 进程管理
Posted howard2005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据讲课笔记1.4 进程管理相关的知识,希望对你有一定的参考价值。
文章目录
零、学习目标
- 查看进程与杀死进程
- 系统资源监控
- 任务管理
一、导入新课
- 执行Linux命令或程序就会启动Linux进程。我们需要学会如何查看进程,如何杀死进程,如何进行系统资源监控,以及如何进行任务管理。
二、新课讲解
(一)进程概述
1、基本概念
- 进程 = 程序 + 执行。当把一个程序从磁盘中加载到内存中,CPU去运算和处理这个进程(运行起来的程序就是进程)。
2、三维度看待进程
- 内存维度:每个进程都独占一块地址空间,CPU处理进程实际上就是处理这个进程内存的首地址到尾地址的数据库信息。
- 执行的逻辑维度:每一个进程都可以被CPU所处理和计算,此外,每一个进程也可以挂起,让其他进程得以处理。在同一个时刻,只能有一个进程被cpu所处理。总结:进程模型,在宏观上是并行处理的,但是微观上看,是“串行”处理的(单核)。如果是多核架构,宏观和微观上都是并行处理的。
- 时间维度:每个进程执行一段时间之后,肯定都完成了一定的工作量。即进程是随时间向前推进的。
- 进程让每个用户感觉自己独占CPU
3、引入多进程模型
-
最开始的操作系统是单道编程(一个程序处理完,再处理下一个程序)
-
缺点:1、响应时间慢(客户体验差);2、CPU利用率非常低
-
例如:假设一个进程, 20 % 20\\% 20%需要做CPU运算, 80 % 80\\% 80%在做IO(发送IO事件时,CPU时闲置的) ⟹ \\Longrightarrow ⟹CPU利用率是 20 % 20\\% 20%
-
采用单道编程模型:CPU利用率 = 1 − 0.8 = 20 % 1 - 0.8 = 20\\% 1−0.8=20%
-
采用多道编程模型
– 同时执行两个进程,CPU利用率: 1 − 0.8 × 0.8 = 36 % 1 - 0.8 \\times 0.8 = 36\\% 1−0.8×0.8=36%
– 同时执行三个进程,CPU利用率: 1 − 0.8 × 0.8 × 0.8 = 48.8 % 1-0.8\\times0.8\\times0.8=48.8\\% 1−0.8×0.8×0.8=48.8%
- 总结:引入进程模型,目的就是为了满足多道编程,而多道编程的目的就是为了提高CPU的利用率。随着进程数量的增加,CPU的利用率逐步提高。
4、进程的产生和消亡
(1)进程的产生
- 操作系统产生服务进程
- 父进程创建子进程
- 用户请求创建一个进程
(2)进程的消亡
- 进程的所有运算都处理完之后,自行退出
- 进程在运行过程中产生错误或异常而强行退出
- 一个进程被其他进程所杀死而退出
5、进程三种状态
- 进程三种状态:执行态(Running)、就绪态(Ready)、阻塞态(Blocking)
- 执行态:一个进程正在被CPU运行挂起态
- 对于挂起态,要讨论什么原因导致的挂起
(1)一个进程由于发生了某些阻塞操作,比如I/O事件。
(2)一个进程由于执行了很长时间,主动挂起,让其他进程得以处理。
(3)用户主动将进程挂起,比如sleep操作 - 总结:针对第一类和第三类挂起的进程,即使把CPU让给这个进程,CPU也处理不了,把这样挂起的进程称为
阻塞态进程
,第二类进程,称之为就绪态进程
。
6、进程ID(PID)
- 进程启动时,操作系统为其分配相对应的系统内唯一的进程ID(PID)。
- 执行命令:
ps -aux
,查看进程详情
- 说到Linux,TTY是UNIX和Linux中的抽象设备。有时它指的是物理输入设备,如串行端口,有时它指的是允许用户与系统交互的虚拟TTY。TTY是Linux和Unix中的一个子系统,通过TTY驱动程序在内核级别实现流程管理、编辑和会话管理。实际上,每当启动终端模拟器或使用系统中的任何类型的shell时,它都会与被称为伪TTY或PTY的虚拟TTY进行交互。
(二)查看进程
1、进程查看命令 - ps
- ps: process status
(1)命令作用
- 将某个时间点的程序运作情况截取下来。
(2)参数说明
参数 | 作用 |
---|---|
a | 和输入终端关联的所有进程,通常与x一起使用,列出完整信息。 |
x | 后台进程,通常与a 这个参数一起使用,可列出较完整信息 |
u | 有效使用者相关的进程 |
(3)操作案例
- 执行命令:
ps la | head -5
,能够观察所有系统的数据
- 执行命令:
ps axjf | head -20
,连同部分程序树状态
- 执行命令:
ps l
仅查看自己的bash相关的进程
- 执行命令:
ps aux
观察系统所有进程
属性 | 含义 |
---|---|
USER | 进程使用者 |
PID | 进程标识符 |
%CPU | 进程使用掉的CPU 资源百分比 |
%MEM | 进程所占用的物理内存百分比 |
VSZ | 进程使用掉的虚拟内存量(KBytes) |
RSS | 进程占用的物理的内存量(KBytes) |
TTY | 进程在哪个终端机上面运作,若与终端机无关则显示?, 另外, tty1-tty6 是本机上面的登入者程序,若为pts/0 等等的,则表示为由网络连接进主机的程序 |
STAT | 进程目前的状态,状态显示与ps -l 的S旗标相同(R/S/D/T/Z) |
START | 进程被触发启动的时间 |
TIME | 进程实际使用CPU运作的时间 |
COMMAND | 进程的实际命令 |
2、Linux进程状态
状态值 | 含义 |
---|---|
R (TASK_RUNNING ) | 指正在被CPU运行或者就绪的状态(在run_queue队列里的状态) |
S (TASK_INTERRUPTIBLE ) | 可中断的睡眠状态,处于等待状态中的进程,一旦被该进程等待的资源被释放,那么该进程就会进入运行状态 |
D (TASK_UNINTERRUPTIBLE ) | 不可中断的睡眠状态,该状态的进程只能用wake_up()函数唤醒。 |
T (TASK_STOPPED / TASK_TRACED ) | 当进程收到信号SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU时就会进入暂停状态。可向其发送SIGCONT信号让进程转换到可运行状态。 |
Z (TASK_DEAD -EXIT_ZOMBIE ) | 僵尸进程:当进程已经终止运行,但是父进程还没有询问其状态的情况。不可被kill,即不响应任务信号,无法用SIGKILL杀死。 |
3、观察进程变化命令 - top
(1)参数选项
选项 | 含义 |
---|---|
-d | 后面可以接秒数,就是整个程序画面更新的秒数;默认5秒。 |
-b | 以批次方式执行top,还有更多参数可以使用,通常会搭配数据流重导向来将批次的结果输出成为档案。 |
-n | 与-b 搭配,作用是需要进行几次top的输出结果。 |
-p | 指定某些个PID 来进行观察监测。 |
(2)操作案例演示
- 执行命令:
top -d 3
,每隔三秒更新一次数据
- 执行命令:
top -b -n 2
,进行两次top的输出结果
4、查看进程树命令 - pstree
(1)命令概述
- pstree命令用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以直观地看出是谁创建了谁。Linux 系统中进程之间的关系就是一棵树,树的根就是进程 PID 为 1 的 init 进程。
(2)安装pstree
- 执行命令:
pstree
,报错找不到命令,说明CentOS7默认没有安装pstree
- 执行命令:
yum -y install psmisc
(3)参数说明
参数 | 含义 |
---|---|
-A | 各进程树之间的连接以 ASCII 码字符来连接 |
-U | 各进程树之间的连接以 utf8 字符来连接,某些终端可能会有错误 |
-p | 同时列出每个进程的 PID |
-u | 同时列出每个进程的所属账号名称 |
(4)操作案例演示
- 执行命令:
pstree
- 执行命令:
pstree -Aup
(三)杀死进程 - kill命令
1、命令作用
- kill发送信号,并不只是杀进程。
2、参数说明
参数 | 函数 |
---|---|
-l | 这个是L的小写,列出目前kill 能够使用的信号(signal)有哪些? signal 向进程发送的信号,指示其进行不同操作。用man 7 signal 可知。 |
-15 | 以正常的程序方式终止一个进程!!! |
-9 | 立刻强制终止一个进程!!! |
-2 | 代表由键盘输入[Ctrl + C] 同样的动作 |
-1 | 对于sshd这样的守护进程,重新读取一次参数的配置文件(类似reload),如果进程为非守护进程,默认为终止进程 |
3、操作案例演示
-
执行命令:
pstree -aup | grep sshd
-
用参数
-1
来杀910进程,执行命令:kill -1 910
-
说明没有杀死sshd进程,又重新加载了
-
用参数
-9
来杀死这个守护进程sshd,执行命令:kill -9 910
-
启动firewalld进程并查看其进程树
-
问题:父进程被kill掉,它的子进程是否就一起被kill掉?
-
结论:父进程被kill掉了,但是其子进程还依然存在。
-
如果任务是杀死所有用户的firewalld进程,那么就需要多次发布kill命令,很烦的,怎么办呢?Linux提供了一个很好的命令:killall。
-
利用killall命令杀死所有用户的firwalld进程
(四)系统资源监控
1、free命令
- 观察内存(memory)使用情况
2、uname命令
- 查阅系统与核心相关信息
3、uptime命令
- 观察系统启动时间与工作负载
4、netstat命令
- 网络状态监控,CentOS7默认没有安装netstat,需要自行安装
- 执行命令:
yum -y install net-tools
- 执行命令:
netstat -atp
- 执行命令:
netstat -antp
- 执行命令:
netstat -lntp
5、vmstat命令
- 侦测系统资源变化,CPU/内存/磁盘输入输出状态
- 执行命令:
vmstat 1 4
,统计目前主机CPU状态,每秒一次,共计四次
(五)任务管理
1、前台进程
- 可以控制与执行命令的bash环境称为前台进程。
2、后台进程
- 在操作系统中自行运行,你无法使用[Ctrl + C]终止,可使用bg/fg命令操作的任务。
- 后台执行的任务不能接收终端(terminal/shell)的输入。
3、操作案例演示
-
Ctrl+Z切换到后台,或者执行命令:
tail -F anaconda-ks.cfg &
-
在当前bash执行多个任务
-
观察后台任务,用jobs命令(后台任务是一个任务栈,
+
表明该任务处于栈顶,发布fg
命令,只有处于栈顶的后台任务才能切换成前台任务)
-
执行命令:
jobs -r
# r: Running
-
执行命令:
jobs -s
# s: Stopped
-
执行命令:
jobs -l
,可以显示后台任务进程号
-
三种任务状态:Running, Stopped, Killed
-
执行命令:
pstree -aup
,查看进程树的sshd部分
-
利用
fg
命令可以将后台任务切换到前台,注意每次发布fg
命令,只能将处于任务栈顶的后台任务(编号后是“+
”的后台任务)切换到前台进行处理,然后栈顶的下一个任务就成为新的栈顶任务,其编号后的“-
”就会变成“+
”。 -
发布一次fg命令
-
进入末行模式,输入q,不存盘退出。
-
执行命令:
jobs -l
-
现在,执行
fg
命令之后,2768
这个处于栈顶的后台任务会变成前台任务来处理,但是我们暂时不把该任务切换到前台。我们试着杀死该后台任务。 -
停止作业:
kill -15 2768
-
事实表明,删不掉vim作业,应该使用参数-9
-
再次执行命令:
fg
-
小结:通过
fg
命令,可以不断把栈顶的作业从后台变成前台作业来处理。
三、归纳总结
- 回顾本节课所讲的内容,并通过提问的方式引导学生解答问题并给予指导。
四、上机操作
- 形式:单独完成
- 题目:完成进程管理
- 要求:按照讲课笔记完成显示进程、杀死进程与作业前后台切换任务
以上是关于大数据讲课笔记1.4 进程管理的主要内容,如果未能解决你的问题,请参考以下文章