文章目录
什么是进程 (process)?
• 程序是静态的文件
• 进程是运行中的程序的一个副本
• 进程存在生命周期(准备期,运行期,终止期)
注:线程是进程的最小单位,进程是资源调配的最小单位。
进程状态
状态 | 定义 |
---|---|
R(TASK_RUNNING) | 可执行状态(RUNNING,READY) |
S(TASK_INTERRUPTIBLE) | 可唤醒睡眠状态 |
D (TASK_UNINTERRUPTIBLE) | 不可唤醒睡眠状态 |
T(TASK_STOPPED) | 暂停状态 |
z( EXIT_ZOMBIE | 僵死态 |
进程查看
pstree查看进程树
systemd为守护进程,其作用对子进程进行初始化,在系统开启时会自动打开。
ps 命令
显示当前命令执行时进程状态。
ps | 功能 |
---|---|
a | 显示与终端相关进程(BSD) |
x | 显示所有与终端无关进程(BSD) |
u | 以用户为归类来显示进程状态信息(BSD) |
f | 层级结构显示进程信息 |
o | 指定查看选项,pid,comm,nice,pri,pcpu,stat,ppid |
-e | 显示所有进程(uinx) |
-f | 显示完整格式信息(unix) |
-H | 层级结构显示进程的相关信息 |
-o | 指定查看选项,pid,comm,nice,%cpu,%mem,nice |
ps a ##显示与终端相关进程(BSD)
ps x ##显示所有与终端无关进程(BSD)
ps ax ## 系统中所有进程
ps aux ##以用户为归类来显示所有进程状态信息(BSD)
pa auxf ##以用户为归类来显示所有进程状态信息(BSD)并显示层级结构。
ps axo pid,comm,nice stat 查看指定选项
ps -e ##显示所有进程(unix)
ps -ef ##显示所有进程的完整格式信息(unix)
我们可以看到,第一列为所属用户,第二列为pid,第三列为ppid(副级进程),第四列c为cpu用量,第五列stime代表进程运行时间,第六列tty代表进程运行所在的终端,第七列time代表进程被cpu处理的时间,第八列com代表进程的名字。
ps -efH ##显示所有进程的完整格式信息,并显示层级结构。(unix) (缩进形式)
ps -eo pid,user,group,comm,%cpu,%mem,nice ##unix风格查看指定选项
利用sort对进程进行排序:
ps axo pid,comm,%cpu,%mem --sort=%mem ## 对显示的进程以占用内存大小由小到大排序
若要由大到小排序,可以ps axo pid,comm,%cpu,%mem --sort=-%mem
PS命令显示信息
字段 | 解释 |
---|---|
USER | 用户名称 |
PID | 进程id |
%CPU | cpu用量百分比 |
%MEM | 内存用量百分比 |
VSZ | 占用虚拟内存大小 |
RSS | 常驻内存大小 |
TTY | 字符终端 |
STAT | 进程状态 |
TIME | 占用cpu时间 |
COMMAND | 进程名称 |
pgrep 显示指定信息进程
pgrep | 功能 |
---|---|
-u uid | 显示指定用户进程 |
-U name | 显示指定用户进程 |
-t tty | 显示指定终端进程 |
-l | 显示进程名称 |
-a | 显示完整格式进程名 |
-P(pid) | 显示指定进程的子进程 |
pgrep -u uid ##显示指定用户进程
pgrep -l -u uid ##显示指定用户的进程并显示及进程名称
pgrep -l -U 用户名称 ##显示指定用户的进程并显示进程能名称。
pgrep -l -t tty ##显示指定终端进程并显示进程名称
pgrep -a -u 0 ##显示root用户的进程并显示完整格式名
pgrep -P pid 显示指定进程的子进程
pidof根据进程名称获取pid
pidof vim ##获取vim的pid
top 命令
top内部参数:对于上图来说,8:07:00
为当前系统时间,up 54 min
为系统运行时间,1 user
为当前1名用户登陆系统load average: 0.00, 0.00, 0.00
为系统的负载,分别为1分钟内,5分钟内,及15分钟内cpu处理的进程长度,也就是显示数值越高,队列长度越长,说明cpu负载越高。Tasks: 250 total
为任务总量,1 running为1个正运行, 249 sleeping
为有249的水面状态的进程,0 stopped
0个暂停状态的进程。0 zombie
0个僵死态进程。%Cpu(s)
为cpu使用量,6.5 us
为用户占用的cpu,0.7 sy
为内核cpu用量,0.0 ni
为进程优先级调整占用的cpu,92.6id
为cpu空闲时间,0.0 wa
为输入输出等待时间, 0.2 hi
为硬件中断时间, 0.0 si
为软件中断时间,0.0 st为被偷走的cpu用量(真机内虚拟机cpu占用),1829.1 total
为物理内存总量,227.4free
为空闲内存量.985.8 used
为被使用的内存量,615.9buff/cache
为缓存量。MiB Swap
为虚拟内存用量。
显示的信息有PID为进程id,USER为用户名称,PR表示优先级,NI代表nice值,VIRT,为虚拟内存,RES为常驻内存,SHR为共享的资源,S为状态,% CPU为cpu用量,%MEM为内存用量,TIME+为占用cpu时间,COMMAND为进程名称。
总结如下:
top | 系统当期时间 |
up | 系统运行时常 |
user | 登录当前系统的用户数量 |
load average | 平均负载1分钟 5分钟 15 分钟的队列长度(uptime) |
task | 任务 |
%cpu | cpu占用百分比 |
us | 用户空间 |
sy | 内核空间 |
ni | nice调整时间 |
id | 空闲时间 |
wa | 等待io |
hi | 处理硬件中断 |
si | 处理软件中断 |
st | 被虚拟化程序占用的百分比 |
mem | 物理内存 |
swap | 交换分区占用 |
top 内部参数
参数 | 功能 |
---|---|
P | cpu百分比排序 |
M | 内存百分比排序 |
T | 累计占用cpu时间排序 |
l | 开启/关闭uptime信息 |
t | 开启/关闭task&cpu信息 |
s | 调整刷新频率 |
k | 终止进程 |
u | 查看指定用户进程 |
在top内按l开启/关闭uptime信息:
按下l后,关闭 uptime信息
关闭后,再次按l开启显示uptime信息
同样,在top中按t 开启/关闭task&cpu信息:
在top里按1,显示整体内核cpu负载:
按下s调整刷新频率:
按下k 输入进程id进行终止进程:
按下u查看特定用户进程:
按下u后 输入需要查看的用户,回车:
top命令参数
top | 功能 |
---|---|
-d | 指定刷新间隔 |
-b | 以批次方式显示 |
-n | 显示批次数量 |
top -d指定刷新间隔:
top -b ##以批次方式显示,默认时间间隔为3秒。
top -n 数量 ##指定显示批次
进程优先级
按照资源占用划分进程类型:
资源使用 | 进程类型 |
---|---|
cpu使用密集 | CPU-Bound |
I/O使用密集 | I/O-Bound |
cpu使用密集的计算量一般很大,例如视频图像处理。
|I/O使用密集的输入输出比较高,例如编译器编译。
如果cpu使用密集的程序占用的cpu比较高,就会造成i/o使用会受阻。这样显然不合适,所以在cpu使用密集的程序多分配cpu的同时调高i/o使用密集程序的优先级。
优先级范围
对Linux而言优先级被划分成固定个数(0-139)。
1-99为实时有优先级,数字越大优先级越高,不用手动处理系统自用。不能人为干预。
100-139为静态优先级,数字越小优先级越高。通常可以人为干预。
通常将100-139称为NICE值。共40个。
NICE值
NICE值:-20~19对用静态优先级。(对应静态优先级100-139,NICE值越高,优先级越低)
普通用户只可以调低优先级,超级用户任意调整。
关于优先级的命令:
查看优先级:ps ax –o stat,nice,pid,comm
默认情况下,进程的优先级为120,NICE值为0。
可以看到,此时vim的nice值为0。
使用 renice -n 优先级 程序id
来修改vim程序的nice值。
vim的NICE值被修改为10。
开启进程时指定优先级:
新打开vim并将其后台运行:vim&
用ps ax –o stat,nice,pid,comm
查看
使用 nice -n 5 vim&
将后台的vim的优先级调至5:
进程前后台调用
在终端运行一些指令的时候,往往会占用整个终端例如gedit:
如果在终端中ctrl+c将进程结束,会发现gedit就被结束。如果需要用到终端而且也要用到gedit程序,我们就需要使gedit在后台进行运行。
进程前后台调用相关命令:
指令 | 含义 |
---|---|
jobs | 查看后台任务 |
ctrl+z | 将前台运行进程打入后台 |
bg | 激活后台进程 |
fg | 调回进程 |
& | 运行在后台 |
利用ctrl+z将gedit后台运行:
使用ps o stat comm
查看进程状态和进程名称:
可以看到,gedit的状态为Tl暂停状态,此时刚打开的gedit不可用。
用jobs查看在后台的进程:
我们可以使用bg+job号将后台进程进行激活:
此时gedit有stopped变为Running、
- 但是不能用bg将vim唤醒:
我们可以看到,使用bg将vim进行唤醒后的结果 vim状态仍然为Stopped。因为vim运行时必须占用终端,当被激活后又被系统打入后台挂起,所以需要将其调回前台:fg 2
或者使用gedit & 或者vim &可在进程开启时将进程后台运行。
进程的信号
- nam 7 signal
可以看到进程的信号为1-30
可控信号类型
可控信号 | 含义 |
---|---|
1 | 刷新 |
2 | 中断键盘输入 |
3 | 退出键盘 |
9 | 强制结束 |
15 | 正常关闭 |
18 | 激活进程 |
19 | 强制暂停 |
20 | 正常暂停 |
2:中断键盘输入
可以看到pid为2723的 bash进程,在pts/0终端,键盘在终端输入会被捕捉。
新打开一个shall,使用kill -2 pid 终止键盘输入。等同 ctrl+c。
3:退出键盘,快捷键使用ctrl+/可以中断鼠标退出键盘。
9:强制结束
killall -9 comm 可以结束comm的所有进程
15:正常关闭
19:正常暂停
18:对暂停的进程进行激活
19:强制暂停,不会被系统阻塞
20:正常暂停,可能会被系统阻塞
信号指令
- kill 信号 pid
- pkill 信号 进程
- killall 信号 comm
系统守护进程
- 守护进程就是通常讲Daemon进程
- 是linux后台执行的服务进程
- 是独立于控制终端、周期性地执行某种任务或等待处理某些发生事件
- 不会随终端关闭而停止,直到接受停止信息才会结束
实验环境的设定:
使用nm-connection-editor
设定虚拟机网络:
真实主机网关为:172.25.254
可以看到网络设置成功,并用 ipaddr show查看:
可以看到我们设置的虚拟机网络, 此时用虚拟机ping真机看为网络是否连通:
在ping时如果失败尝试关闭真机的火墙:systemctl stop firewalld
在真实主机尝试连接虚拟机:ssh -l 172.25.254.119
输入虚拟机root用户密码之后成功连接上虚拟机,此时我们做的所有操作均在虚拟机里。
真实主机之所以能连接上虚拟机,是因为虚拟机李默认开启了sshd进程,允许其他人连接:
而sshd是由许多的程序组成的一个程序簇,具有复杂个功能,我们将它叫做服务(service)。服务是提供给别人使用的。注意这种服务型的进程不能用kill pkill killall进行管理,而是用systemctl。
系统中所有进程的开启都是守护进程的子进程,所以守护进程也对于服务进程进行控管。
守护进程类型
守护进程类型 | 使用系统及特点 |
---|---|
Sysv init | 经典的守护进程类型延用到rhel6 |
upstar | 做到并行启动rhel6中应用 |
systemd | 独立完成启动,rhel7中 |
- Sysv init 按照次序将服务依次启动(链式开启),启动速度慢。
- upstart 并行启动服务进程,只在rhel6中应用。
- systemd可以独立完成启动,只需打开systemd,其他后续的服务会根据systemd的控制进行初始化。大幅度加快系统启动速度。
systemctl用法之一
指令 | 用途 |
---|---|
systemctl list-unit-files | 查看服务开机运行情况 |
systemctl list-units | 查看服务当前运行情况 |
systemctl list-dependencies | 查看服务依赖性 |
systemctl status service | 查看服务状态 |
systemctl start service | 开启服务 |
systemctl stop service | 关闭服务 |
systemctl reload service | 重新加载服务 |
systemctl list-units 查看服务当前运行情况:
systemctl list-unit-files 查看服务开机运行情况:
enabled为开机自动开启,disabled为开机不自动开启,static为静态(需要时候就自动打开)通常根据某些服务的需要而打开。
systemctl list-dependencies service查看服务依赖性
systemctl status service 查看服务状态:
systemctl stop service 关闭服务:
sstemctl start service 开启服务:
systemctl reload service 重新加载服务:
当更改完系统配置时,不能重启服务的情况下,可以用systemctl reload service 重新加载服务。
systemctl用法之二
指令 | 用途 |
---|---|
systemctl restart servic | 重新启动服务 |
systemctl enable servic | 设定服务开启启动 |
systemctl enable --now servic | 设定服务开机启动并开启服务 |
systemctl disable servic | 设定服务开机关闭 |
systemctl set-default multi-user.target | 设定系统运行级别为无图形网络模式 |
systemctl set-default graphical.target | 设定系统运行级别为图形网络 |