进程理解
进程
进程(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——父级进程比子进程结束晚,子进程的资源由父级进程回收。当子进程在系统中所调用的系统资源没有结束时,如果父级进程先结束掉,则没有人回收子进程,一直占用资源成为僵死态。系统不能回收资源会越来越卡。
进程查看
pstree
命令
利用pstree
命令来用树形结构查看进程
由于内核本身的原因影响,使得系统无法同时执行所有进程,因此systemd的作用就是对所有进程进行管理,对各个子进程进行初始化,systemd被称为守护进程。守护进程在系统开启时自动打开。
ps
命令
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)
其中TTY表示字符终端
ps x——显示所有与终端无关进程(BSD)
ps ax——显示所有进程,包括与终端相关进程和与终端无关进程(BSD)
注意:ps ax显示进程以资源的方式进行归类(PID从小到大排列)
ps u——以用户为归类来显示进程状态信息(BSD)
ps f ——层级结构显示进程信息(BSD)
ps -e 显示所有进程(uinx)
ps -f 显示完整格式信息(unix)
ps -o 指定查看选项,如pid,comm,nice,%cpu,%mem,nice等
ps可以对当前的某些资源进行排序
[root@localhost Desktop]# ps axo pid,comm,%mem --sort=%mem
正序显示
[root@localhost Desktop]# ps axo pid,comm,%mem --sort=-%mem
倒序显示
pgrep 进程过滤命令
pgrep 显示指定信息进程
pgrep命令参数 | 功能 |
---|---|
-u uid | 显示指定用户进程 |
-U name | 显示指定用户进程 |
-t tty | 显示指定终端进程 |
-l | 显示进程名称 |
-a | 显示完整格式进程名 |
-P pid | 显示指定进程的子进程 |
pidof 根据进程名称获取pid
pidof vim ——查看一个命令进程的ID
watch -n 1 date
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 | 查看指定用户进程 |
在top命令界面 点按相应的按钮来完成对应的功能
top命令参数 | 功能 |
---|---|
top -d | 指定刷新间隔 |
top -b | 以批次方式显示 |
top -n | 显示批次数量 |
进程优先级
按照资源占用划分进程类型
资源使用量 | 进程类型 |
---|---|
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 优先级 程序——调整开启进程时的指定优先级
进程前后台调用
进程前后台调用相关命令
指令 | 含义 |
---|---|
jobs | 查看后台任务 |
ctrl+z | 将前台运行进程打入后台 |
bg+后台运行job号 | 激活后台挂起的进程 |
fg+后台运行job号 | 调回进程 |
& | 运行在后台 |
ctrl+z——将前台运行进程打入后台
jobs——查看后台任务
bg+后台运行job号——激活后台挂起的进程
注意:bg不能将vim运行,因为vim需要终端的运行环境
fg+后台运行job号—— 调回进程
&——进程开启后运行在后台
信号
man 7 signal——查看信号
[root@localhost Desktop]# man 7 signal
进程信号
可控信号类型
可控信号 | 含义 |
---|---|
1 | 刷新 |
2 | 中断键盘输入 |
3 | 退出键盘 |
9 | 强制结束进程 |
15 | 正常关闭进程 |
18 | 激活进程 |
19 | 强制暂停(系统不阻止) |
20 | 正常暂停(会被系统阻塞,系统认为不适合暂停) |
信号命令
kill 信号 pid
killall 信号 进程名称
pkill 信号 进程名称 (类似于pgrep)
守护进程systemd
服务型软件的控制不能用kill或者killall这种单独的程序管理工具进行管理,要用systemctl进行管理
守护进程的定义
• 守护进程就是通常讲Daemon进程
• 是linux后台执行的服务进程
• 不需要终端,是独立于控制终端、周期性地执行某种任务或等待处理某些发生事件
• 不会随终端关闭而停止,直到接受停止信息才会结束(或手动关闭)
守护进程类型
守护进程类型 | 使用系统及特点 |
---|---|
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 | 重新加载服务配置 |
使用id addr show 命令来查看本机ip
可以注意到 这台虚拟机的ip是 10.211.55.4
我们打开Mac环境下的终端
利用ssh 命令远程连接虚拟机
ssh -l root 172.25.254.165
输入密码后就可以连接虚拟机了
systemctl list-units --type=service
查看系统当中所有服务当前的运行情况
sshd服务可以允许其他主机通过ssh连接
systemctl list-unit-files --type=service
查看服务开机运行情况
其中 enabled 表示开机自动启动
disabled 表示不会开机启动
static 表示静态的,不需要进行管理 会自动根据需要打开
systemctl list-dependencies service 查看服务依赖性
systemctl status service 查看服务状态
systemctl stop service 关闭服务
systemctl start service 开启服务
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 | 设定系统运行级别为图形网络模式 |