什么是进程?
程序放置在存储媒体中(如:硬盘,光盘,软盘,磁带等),为实体文件的形态存在。
进程:程序被触发后,执行者的权限与属性/程序中程序码与所需数据等都会被载入内存中,操作系统并给予这个内存内的单元一个识别码(PID),可以说,进程就是一个正在运行中的程序。
进程实际就是系统未完成并且正在进行的工作。
进程的状态
R(running) | 该程序正在运行中 |
---|---|
S (sleeping) | 该程序目前正在睡眠状态(idle),但可以被唤醒 |
D | 不可被唤醒的睡眠状态,通常进程可能在等待I/O的情况 |
T 停止状态(stop) | 可能是在工作控制(背景暂停)或出错(traced)状态 |
Z(Zombie) | 僵尸状态,程序已经终止但却无法被移除至内存外 |
注意:
sleeping和stop区别:sleeping可以被唤醒,stop默认情况不能唤醒,除非用命令。
查看进程
- 图片方式查看
命令: gnome-system-monitor
- 进程查看命令
ps (process scan)进程扫描
ps a 显示当前环境中运行的进程
ps -A 系统中的所有进程,和-e差不多
ps -a 除环境信息之外当前环境中运行的所有进程(不包括环境本身的进程)
ps -d 显示除shell之外的所有进程
ps e 显示进程扩展信息,调用的系统资源环境
ps x 显示所有有输出设备的程序,有终端
ps -u 显示进程用户信息 userlist
ps f显示进程的从属关系。父级进程结束,子进程不一定结束,父级进程强行关闭,改叫孤儿进程。孤儿进程受初始化进程的控制,可能会出现异常。
ps常用组合
- ps aux 显示系统中所有进程并显示进程用户
- ps ef 显示进程详细信息并显示进程父子关系
- ps ax 显示当前系统中的所有进程
- pstree 显示当前系统的进程树(systemd是系统的初始化进程)
显示进程指定信息
格式: ps -o *** 显示进程的指定信息
命令 | 说明 |
---|---|
ps -o comm | 进程名称 |
ps -o user | 进程所有人 |
ps -o group | 进程所有组 |
ps -o %cpu | 进程中cpu的使用率 |
ps -o %mem | 进程中内存使用率 |
ps -o pid | 进程id |
ps -o nice | 进程优先级 |
例如:
显示进程的名称,优先级,所有人,所有组,cpu使用率,内存使用率以及进程id
进程排序
ps -ax - -sort=+%cpu | -%cpu
ps -ax - -sort=+%mem | -%mem
其中,+表示升序排列,–表示降序排列
例如:获得系统中内存使用量排在前5的进程的id
(先取前6包括表头,再取后5去掉表头)
或者
stat中显示的信息
S | 进程状态 |
---|---|
l | 内存中有锁定空间 |
N | 优先级低 |
< | 优先级高 |
+ | 前台运行 |
s | 顶级进程 |
例如:下图中Ss表示此进程为顶级进程,S+表示此进程正在前台运行,SNl表示此进程内存中有锁定空间,优先级低。
进程优先级
(1)进程优先级范围
-20~19 数值越小优先级越高
(2)优先级查看
命令:
ps ax -o pid,nice,comm
(3)指定某个优先级开启进程
命令:
nice -n 优先级数字 进程名称
例如:nice -n -5 gedit 开启gedit并指定优先级为-5
(4)改变进程优先级
命令:
renice -n 优先级数字 进程pid
例如:
环境中进程的前台调用
jobs | 查看被打入环境后台的进程(+表示默认操作,-表示次默认,‘ ’表示没有优先级) |
---|---|
ctrl+z | 把占用终端的进程打入后台 |
fg jobsnum | 把后台进程调回前台 |
bg jobsnum | 把后台暂停的进程运行 |
comm & | 让命令直接在后台运行 |
例如:
注意:
当不写jobsnum时,默认调回优先级高的进程。
进程信号
1.常用信号等级
1 | 进程重新加载配置 |
---|---|
2 | 删除进程在内存中的数据 |
3 | 删除鼠标在内存中的数据 |
9 | 强行结束单个进程(不能被阻塞) |
15 | 正常关闭进程(可能会被阻塞) |
18 | 运行暂停的进程 |
19 | 暂停某个进程(不能被阻塞) |
20 | 把进程打入后台(可以被阻塞) |
man 7 signal | 查看信号详细信息 |
kill -信号 进程pid
killall -信号 进程名字
pkill -u student -信号(切换到student用户下)
例如:删除pid为5109的进程在内存中的数据
关闭名字包括vim的进程(执行后进程被停止)
强行结束vim进程
进程的动态监控
命令:top
1 | 显示cpu每个核的负载 |
---|---|
s | 调整刷新的频率 |
c | cpu负载排序 |
m | 内存使用量排序 |
h | 查看帮助 |
u | 查看指定用户进程 |
k | 对指定的进程发起信号 |
z | 显示颜色 |
b | 高亮显示 |
q | 退出 |
例如:在真机中
注意:
top命令每回车一次就自动刷新一次
控制服务
- 什么是服务?
系统中运行的对于系统本身没有意义,但是对客户主机有重大意义的程序叫做服务性软件,简称服务。
服务器:安装了服务性软件的系统 - 用什么控制服务?
系统初始化进程可以对服务进行相应的控制。 - 当前系统初始化进程是什么?
systemd 系统初始化进程
pstree 显示系统中的进程树 - 进程控制命令
ssh -------->sshd
client server
客户端 服务器端
命令 | 说明 |
---|---|
systemctl | 服务控制命令 |
systemctl status sshd | 查看服务状态(inactive不可用,active可用) |
systemctl start sshd | 开启服务 |
systemctl stop sshd | 关闭服务 |
systemctl restart sshd | 重启服务 |
systemctl reload sshd | 重新加载服务配置 |
systemctl enable sshd | 设定服务开机启动 |
systemctl disable sshd | 设定服务开机不启动 |
systemctl list-units | 列出已经开启服务当前状态 |
systemctl list-unit-files | 列出所有服务的开机状态(disable,enable,static) |
systemctl list-dependencies | 列出服务的依赖 |
systemctl set-default multi-user.target | 设定系统启动级别为多用户模式(无图形) |
systemctl set-default graphical.target | 设定系统启动级别为图形模式 |
systemctl mask sshd | 冻结服务 |
systemctl unmask sshd | 解除冻结 |
例如:查看当前服务的状态
关闭服务
重启服务
设定服务开机不启动
注意:
disable操作后,再次打开虚拟机sshd服务不会开启。
列出已经开启服务当前状态
列出所有服务开机启动的状态
注意:
所有的服务有四种状态:static,disabled,enabled,masked。将masked封锁状态下的服务改为unmask解锁,命令为:systemctl unmask服务名/进程名。然后该服务的状态变为static,disabled,enabled中的一个。
列出所有服务的依赖
设定系统启动级别为多用户模式(无图形)
冻结服务
解除冻结
另外,解锁其他服务的步骤:
1.先列出所有服务开机启动时的状态systemctl list-unit-files
2.将状态为masked的服务tmp.mount解锁,命令为:systemctl unmask 服务名
可以看到tmp.mount的状态变为disabled,恢复它被锁住masked状态的命令为:systemctl mask 服务名