1.什么是进程
进程(Process):进程是程序运行时的状态
• 程序是静态的文件
• 进程是运行中的程序的一个副本(运行程序时会把程序复制到内存缓存空间中)
• 进程存在生命周期(准备期,运行期,终止期)
准备期——把代码缓存到系统硬件
运行期——处于工作状态
终止期——工作完成后,系统把所占用的系统资源全部回收(如果系统不能回收资源系统会越来越卡)
•进程是资源调配的最小单位,线程是进程的最小单位,进程中的所有资源被线程共享
进程状态
状态 | 定义 |
---|---|
R(TASK_RUNNING) | 可执行状态(RUNNING,READY) |
S(TASK_INTERRUPTIBLE) | 可唤醒睡眠状态 |
D (TASK_UNINTERRUPTIBLE) | 不可唤醒睡眠状态 |
T(TASK_STOPPED) | 暂停(停止)状态 |
Z( EXIT_ZOMBIE) | 僵死态 |
1.可运行状态
Running——进行正在运行中
Ready——所有东西加载完毕,在等待队列等待CPU处理
2.可唤醒睡眠状态
S——程序使用CPU处理时,所使用CPU时间过长,(因为CPU处理进程的个数是有限的)所以程序被CPU中止进行下一个进程,进程在这个阶段可以被唤醒
3.不能唤醒睡眠状态
D——所需要的工作中的条件不满足,程序被终止,不能唤醒,等条件满足后才能被唤醒
不能被唤醒的情形:如加载磁盘里比较大的文件,没有加载完毕前不能被唤醒
4.暂停(停止)状态
T——进程被暂停。暂停状态是由用户调整的,所以需要用户的指令来唤醒
5.僵死态
Z——父级进程比子进程结束晚,子进程的资源由父级进程回收。当子进程在系统中所调用的系统资源没有结束时,如果父级进程先结束掉,则没有人回收子进程,一直占用资源成为僵死态。系统不能回收资源会越来越卡。
2.进程查看
2.1 Pstree 命令查看进程树:树形结构显示进程
[root@workstation Desktop]# pstree
注意:
因为内核不能负载这么多进程,所以开启守护进程systemd是守护进程对进程进行管理,systemd的作用是对子进程进行初始化,守护进程在系统开启时自动打开。
2.2 PS 命令的常规用法
==PS——显示当前命令执行时进程状态
[root@workstation Desktop]# whatis ps
[root@workstation Desktop]# man ps
ps命令参数 | 功能 |
---|---|
•a | 显示与终端相关进程(BSD) |
•x | 显示所有与终端无关进程(BSD) |
•u | 以用户为归类来显示进程状态信息(BSD) |
•f | 层级结构显示进程信息(BSD) |
•o | 指定查看选项,pid,comm,nice,pri,pcpu,stat,ppid |
• -e | 显示所有进程(uinx) |
• -f | 显示完整格式信息(unix) |
• -H | 层级结构显示进程的相关信息(unix) |
• -o | 指定查看选项,pid,comm,nice,%cpu,%mem,nice (unix) |
注意:UNLIX参数带(-)和BSD格式参数不带(-)
PS 命令显示信息
UNIX格式字段 | 解释 |
---|---|
USER | 用户名称 |
PID | 进程id |
%CPU | 进程占用cpu的百分比 |
%MEM | 进程占用内存资源的百分比 |
VSZ | 虚拟内存占用大小 |
RSS | 常驻内容量(不被系统回收的资源) |
TTY | 字符终端 |
STAT | 进程状态 |
START | 程序开始运行时间 |
TIME | 占用cpu总时间 |
COMMAND | 进程名称 |
BSD格式字段 | 解释 |
---|---|
UID | 用户名称 |
PID | 进程ID |
PPID | 父级进程ID |
C | 进程占用cpu的用量 |
STIME | 程序开始运行时间 |
TTY | 字符终端 |
TIME | cpu处理进程的时间 |
CMD | 进程名称 |
•ps a——显示与终端相关进程(BSD)
•ps x——显示所有与终端无关进程(BSD)
•ps ax——显示所有进程,包括与终端相关进程和与终端无关进程(BSD)
注意:ps ax显示进程以资源的方式进行归类(PID从小到大排列)
•ps u——以用户为归类来显示进程状态信息(BSD)
•ps f ——层级结构显示进程信息(BSD)
• ps -e 显示所有进程(uinx)
• ps -f 显示完整格式信息(unix)
• ps -H 层级结构显示进程的相关信息(BSD)
[root@workstation Desktop]# ps -e -f -H
• ps -o 指定查看选项,如pid,comm,nice,%cpu,%mem,nice
ps可以对当前的某些资源进行排序
[root@workstation Desktop]# ps axo pid,comm,%mem --sort=%mem
正序显示
[root@workstation Desktop]# ps axo pid,comm,%mem --sort=-%mem
倒序显示
2.3 pgrep 进程过滤命令
pgrep 显示指定信息进程
pgrep命令参数 | 功能 |
---|---|
• -u uid | 显示指定用户进程 |
• -U name | 显示指定用户进程 |
• -t tty | 显示指定终端进程 |
• -l | 显示进程名称 |
• -a | 显示完整格式进程名 |
• -P pid | 显示指定进程的子进程 |
2.4 pidof 根据进程名称获取pid
• pidof vim ——查看一个命令进程的ID
[root@workstation Desktop]# watch -n 1 date
2.5 top命令的用法
top命令可以真实查看进程状况,具有实时显示功能,默认3s刷新一次
top 显 示 进 程 信 息 详 解 |
---|
top——系统当前时间 |
up——系统运行时长 |
user——登录当前系统的用户数量 |
load average——系统的负载,分别代表平均负载1分钟 5分钟 15 分钟的队列长度(uptime) |
task——任务总量 |
running——运行进程数量 |
sleeping——休眠进程数量 |
stopped——暂停进程数量 |
zombie——僵死进程数量 |
%cpu(s)——cpu占用百分比/使用量 |
us——用户空间,用户占用CPU量 |
sy——内核空间,内核占用CPU量 |
ni ——nice,进程优先级调整占用的CPU量调整时间 |
id——空闲时间 |
wa ——等待I/O输入输出时间 |
hi ——处理硬件中断时间 |
si ——处理软件中断时间 |
st ——被虚拟化程序占用的百分比 |
mem——物理内存使用量 |
buff/cache——缓存=buff等待写入磁盘的+cache读取的,都可以被系统回收利用(内存的空闲使用量=free+buff/cache) |
Swap——虚拟内存使用量,交换分区占用 |
PR——优先级 |
NI ——优先级代表的nice值 |
VIRT——虚拟CPU |
RES——常驻内存 |
SHR——贡献资源 |
S——状态 |
top的相关参数
top内部参数 | 功能 |
---|---|
P | cpu百分比排序 |
M | 内存百分比 |
T | 累计占用cpu时间 |
l | 开启/关掉uptime信息 |
t | 开启/关闭task&cpu信息 |
s | 调整刷新频率 |
k | 终止进程 |
u | 查看指定用户进程 |
P ——cpu百分比排序
M ——内存百分比排序
T ——累计占用cpu时间排序
l ——开启/关掉uptime信息
uptime直接显示系统负载,l关闭负载
t ——开启/关闭task&cpu信息,显示模式不一样
1——显示整体CPU整体负载
s ——调整刷新频率
k ——终止进程
u ——查看指定用户进程 (q退出)
top命令参数 | 功能 |
---|---|
top -d | 指定刷新间隔 |
top -b | 以批次方式显示 |
top -n | 显示批次数量 |
top -d 指定刷新间隔
[root@workstation Desktop]# top -d 1
top -b 以批次方式显示
[root@workstation Desktop]# top -b -d1
top -n 显示批次数量
[root@workstation Desktop]# top -b -d1 -n 2
3.进程优先级
按照资源占用划分进程类型
资源使用量 | 进程类型 |
---|---|
cpu使用密集(计算量大,如视频处理) | CPU-Bound |
I/O使用密集(如编辑器) | I/O-Bound |
注意:对CPU使用密集的程序多分配CPU,但是要调高I/O使用密集程序的优先级
内核优先级的范围
•对Linux而言优先级被划分成固定个数 (0-139),共140个优先级(内核把程序划分为140个队列)
•1-99为实时有优先级,数字越大优先级越高,不能人为干预,是内核对于程序本身的控制,系统自用
•100-139为静态优先级(共40个),数字越小优先级越高,是人为能干预的
NICE值
NICE值:-20~19对用静态优先级,数字越小优先级越高
普通用户只可以调低优先级,超级用户任意调整
关于优先级的命令
• ps ax –o • nice –n 优先级 程序
• reince–n 优先级 程序pidnice,pid,comm ——查看进程优先级
• reince –n 优先级 pid ——更改进程优先级
• nice –n 优先级 程序——调整开启进程时的指定优先级
4.进程前后台调用
进程前后台调用相关命令
指令 | 含义 |
---|---|
jobs | 查看后台任务 |
ctrl+z | 将前台运行进程打入后台 |
bg+后台运行job号 | 激活后台挂起的进程 |
fg+后台运行job号 | 调回进程 |
& | 运行在后台 |
ctrl+z——将前台运行进程打入后台
jobs——查看后台任务
bg+后台运行job号——激活后台挂起的进程
fg+后台运行job号—— 调回进程
&——进程开启后运行在后台
5.信号
5.1 man 7 signal——查看信号
[root@workstation Desktop]# man 7 signal
5.2 进程信号
可控信号类型
可控信号 | 含义 |
---|---|
1 | 刷新 |
2 | 中断键盘输入 |
3 | 退出键盘 |
9 | 强制结束进程 |
15 | 正常关闭进程 |
18 | 激活进程 |
19 | 强制暂停(系统不阻止) |
20 | 正常暂停(会被系统阻塞,系统认为不适合暂停) |
1 ——刷新
让进程再次读取配置
2 ——中断键盘输入
3 ——退出键盘
快捷键:ctrl+\退出鼠标,鼠标动才会出现(如:看视频时鼠标会隐藏)
9 ——强制结束进程
15——正常关闭
18 ——激活进程
19——强制暂停(系统不阻止)
20——正常暂停(会被系统阻塞,系统认为不适合暂停)
5.3 信号命令
kill 信号 pid
killall 信号 进程名称
pkill 信号 进程名称 (类似于pgrep)
6.守护进程systemd
服务型软件的控制不能用kill或者killall这种单独的程序管理工具进行管理,要用systemctl进行管理
6.1 守护进程的定义
• 守护进程就是通常讲Daemon进程
• 是linux后台执行的服务进程
• 不需要终端,是独立于控制终端、周期性地执行某种任务或等待处理某些发生事件
• 不会随终端关闭而停止,直到接受停止信息才会结束(或手动关闭)
6.2 守护进程类型
守护进程类型 | 使用系统及特点 |
---|---|
Sysv init | 经典的守护进程类型延用到rhel6(链式启动服务) |
upstart | 做到并行启动rhel6中应用 |
systemd | 独立完成启动,rhel7中使用 |
systemctl 用法之一
指令 | 用途 |
---|---|
systemctl list-unit-files | 查看服务开机运行情况 |
systemctl list-units | 查看服务当前运行情况 |
systemctl list-dependencies | 查看服务依赖性 |
systemctl status service | 查看服务状态 |
systemctl start service | 开启服务 |
systemctl stop service | 关闭服务 |
systemctl reload service | 重新加载服务配置 |
设定实验环境:
在虚拟机中(超级用户):
网卡设定: nm-connection-editor
真机下运行:ssh -l root 172.25.254.165
systemctl list-units --type=service
查看系统当中所有服务当前的运行情况
sshd服务使主机可以让别人通过ssh连接
systemctl list-unit-files --type=service
查看服务开机运行情况
systemctl list-dependencies service 查看服务依赖性
systemctl status service 查看服务状态
systemctl stop service 关闭服务
关闭sshd服务后,真机无法与虚拟机相连
systemctl start service 开启服务
sshd服务开启后,真机可以和虚拟机相连
systemctl restart =stop+start
systemctl reload service 重新加载服务配置(类似于kill -1)
systemctl 用法之二
指令 | 用途 |
---|---|
systemctl restart service | 重新启动服务 |
systemctl enable service | 设定服务开启启动 |
systemctl enable –now service | 设定服务开机启动并开启服务 |
systemctl disable service | 设定服务开机关闭 |
systemctl set-default multi-user.target | 设定系统运行级别为无图形网络模式 |
systemctl set-default graphical.target | 设定系统运行级别为图形网络模式 |
systemctl restart service 重新启动服务
systemctl disable service 设定服务开机关闭
systemctl enable service 设定服务开启启动
后面需要start开启
systemctl enable –now service 一次性设定服务开机启动并开启服务(=enable+start)
systemctl set-default multi-user.target 设定系统运行级别为无图形网络模式
init 5手动开启图形(不是永久的)
systemctl set-default graphical.target 设定系统运行级别为图形网络模式
是永久设定