1.进程的定义
程序(program)放置在储存媒体中(如键盘,光盘,软盘,磁带等),为实体文件的形态存在。
进程:程序被触发后,执行者的权限与属性,程序的程序码与所需数据等都会被载入内存中,操作系统并给予这个内存的单元一个识别码(PID),可以说,进程就是一个正在运行中的程序,即是系统未完成并且正在进行的工作。进程主要分为两种,一种是和当前环境有关,一种和当前环境无关。
2.查看进程
(1)利用图形方式查看
命令:gnome-system-monitor
输入命令会则会出现进程的图形界面,结果如下:
(2)进程查看命令
命令 | 含义 |
---|---|
ps -A | 所有进程 |
ps -a | 在当前环境中运行的进程,不包含环境信息(会把环境本身过滤掉) |
ps -u | 显示进程用户信息 |
ps a | 在当前环境中运行的进程 |
ps x | 列出系统中所有运行包含tty输出设备(tty是能显示出字符设备的) |
ps f | 显示进程的父子关系 |
ps e | 显示进程的详细信息(系统资源的调用) |
<1>查看所有进程,输入的命令(ps -A)及结果如下:
<2>查看在当前环境中运行的进程,不包含环境信息。输入的命令(ps -a)及结果如下:
<3>查看进程用户信息,输入的命令(ps -u)及结果如下:
<4>查看在当前环境中运行的进程,输入的命令(ps a)及结果如下:
<5>列出系统中所有运行包含tty输出设备,输入的命令(ps x)及结果如下:
<6>显示进程的父子关系,输入的命令(ps f)及结果如下:
<7>显示进程的详细信息,输入的命令(ps e)及结果如下:
(3)ps常用组合
命令 | 含义 |
---|---|
ps aux | 显示系统中所有进程并显示进程用户 |
ps ef | 显示进程详细信息并显示进程父子关系 |
ps ax | 显示当前系统中的所有进程 |
pstree | 显示当前系统的进程树 |
<1>显示系统中所有进程并显示进程用户,输入的命令(ps aux)及结果如下:
<2>显示进程详细信息并显示进程父子关系,输入的命令(ps ef)及结果如下:
<3>显示当前系统中的所有进程,输入的命令(ps ax)及结果如下:
<4>显示当前系统的进程树,输入的命令(pstree)及结果如下:
(4)显示进程指定信息
命令 | 显示进程的指定信息 |
---|---|
ps -o comm | 显示进程名称 |
ps -o user | 显示进程所有人 |
ps -o group | 显示进程所有组 |
ps -o %cpu | 显示进程cou使用率 |
ps -o %mem | 显示进程内存使用率 |
ps -o pid | 显示进程id |
ps -o nice | 显示进程优先级(优先级顺序为由负到正) |
<1>显示进程名称,输入的命令(ps -o comm)及结果如下:
<2>显示进程所有人,输入的命令(ps -o user)及结果如下:
<3>显示进程所有组,输入的命令(ps -o group)及结果如下:
<4>显示进程cpu使用率,输入的命令(ps -o %cpu)及结果如下:
<5>显示进程内存使用率,输入的命令(ps -o %mem)及结果如下:
<6>显示进程id,输入的命令(ps -o pid)及结果如下:
<7>显示进程优先级,输入的命令(ps -o nice)及结果如下:
<8>一次性显示所有想显示的信息,输入的命令(ps ax -o comm,pid,user,group,%cpu,%mem)及结果如下:
(5)进程排序
为什么要对进程排序?原因是进程需要的资源越多,影响就越大,所以要通过排序可以对进程进行进一步了解。
ps ax --sort=+%cpu/-%cpu
ps ax --sort=+%mem/-%mem
<1>对进程中的cpu进行从小到大排序
<2>对进程中的cpu进行从大到小排序
<3>对进程中的mem(内存)进行从小到大排序
<4>对进程中的mem(内存)进行从大到小排序
总结:排序时进行减序时要加负号,默认是正序(可以加“+”,也可以不加)
练习:
抓取系统中内存使用量排在前5的pid,命令及结果如下:
分析:
因为第一行被名称占用了,所以内存使用量排在前5的是2到6行的。
补充:
也可以用以下方式解决此问题
(6)stat中显示的信息
符号 | 显示的信息 |
---|---|
S | 进程状态 |
l | 内存中有锁定空间 |
N | 优先级低 |
< | 优先级高 |
+ | 前台运行 |
S | 顶级过程 |
分析:
<表示进程的优先级要小于默认,l表示有一片锁定的空间,不能被回收,S表示进程状态,Ss进程状态是顶级进程,S<l表示高优先级内存有锁定空间,R+表示正在运行
3.进程优先级
(1)进程的优先级范围
-20~19
<1>可以看到图中的Nice就是优先级,可以选择它并查看每一个进程的优先级,如下图所示:
<2>改变优先级有5个标准级别,如下图所示:
<3>选择Change Priority中的Custom便可以任意调节优先级
(2)优先级查看
ps ax -o pid,nice,comm
(3)指定某个优先级开启进程
nice -n 优先级数字 进程名称
nice -n -5 vim& ##开启vim并且指定程序优先级为-5
注意:加&表示,命令行就不会被占用(即使用命令又不占用终端,相当于即可以打开窗口又可以在命令行中输入别的)
举例:开启vim并且指定程序优先级为-5,然后查看进程的名称,PID和优先级,可以发现vim的优先级为之前设置的-5,输入的命令及结果如下:
(4)改变进程优先级
renice -n 优先级数字 进程pid
renice -n -5 1806 ##改变1806进程的优先级为-5
举例:首先查看进程的优先级等信息,然后改变进程vim的优先级为5,输入的命令及结果如下:
4.环境中进程的前后台调用
命令 | 含义 |
---|---|
jobs | 查看被打入环境后台的进程 |
ctrl+z | 把占用终端的进程打入后台 |
fg jobsnum | 把后台进程调回前台 |
bg jobsnum | 把后台暂停的进程运行 |
comm & | 让命令直接在后台运行 |
<1>首先查看被打入环境后台的进程
<2>开启第三方软件firefox
<3>再次查看firefox进程并把后台进程调回前台
<4>让后台暂停的进程运行并查看被打入后台的进程的相关信息
5.进程信号
信号是一个动作的标识
(1)常用信号等级
等级 | 含义 |
---|---|
1 | 进程重新加载配置 |
2 | 删除进程在内存中的数据 |
3 | 删除鼠标在内存中的数据 |
9 | 强行结束单个进程(不能被阻塞) |
15 | 正常关闭进程(可能会被阻塞) |
18 | 运行暂停的进程 |
19 | 暂停某个进程(不能被阻塞) |
20 | 把进程打入后台(可以被阻塞) |
kill的用法:
kill -信号 进程pid
killall -信号 进程名字
pkill -u student -信号
举例:
(1)删除进程在内存中的数据
<1>首先在后台运行gedit命令并查看进程中和gedit有关的信息
<2>打开另外一个shell脚本,输入kill -2 进程pid删除进程在内存中的数据
<3>再次查看进程中和gedit有关的信息,会发现进程在内存中的数据已经不再存在
(2)删除鼠标在内存中的数据,如果删除了,在shell中鼠标将会消失,相当于看电视时全屏的样子,可以用“ctrl+\”进行模拟,会发现按键后,鼠标将不再出现,直至滑动鼠标。
(3)强行结束单个进程(不能被阻塞)
<1>关闭第三方软件时
[root@client_sshd ~]# ps ax |grep firefox ##再次查看与firefox有关的进程
2635 pts/0 Sl 0:00 /usr/lib64/firefox/firefox
2678 pts/1 R+ 0:00 grep --color=auto firefox
[root@client_sshd ~]# kill -9 2635 ##强行结束单个进程
[root@client_sshd ~]# ps ax |grep firefox ##再次查看与firefox有关的进程
2683 pts/1 R+ 0:00 grep --color=auto firefox
如图所示:
<2>关闭shell脚本时
[root@client_sshd Desktop]# ps ##查看进程
PID TTY TIME CMD
3239 pts/1 00:00:00 bash
3270 pts/1 00:00:00 ps
[root@client_sshd Desktop]# kill -9 3239 ##关闭shell脚本
总结:kill -9命令可以强烈结束每个想结束的进程
(4)正常关闭进程(可能会被阻塞)
<1>开启第三方软件后可以利用kill -15命令关闭进程
[root@client_sshd Desktop]# firefox&
[root@client_sshd ~]# ps ax |grep firefox ##查看与firefox有关的进程
2462 pts/0 Sl 0:00 /usr/lib64/firefox/firefox
2339 pts/1 R+ 0:00 grep --color=auto firefox
[root@client_sshd ~]# kill -15 2462 ##关闭firefox进程
[root@client_sshd ~]# ps ax |grep firefox
2549 pts/1 R+ 0:00 grep --color=auto firefox
命令及结果如下图所示:
<2>试图删除shell脚本,发现不可以利用kill -15命令关闭进程
[root@client_sshd ~]# ps ##查看进程的相关信息
PID TTY TIME CMD
2139 pts/1 00:00:00 bash
2386 pts/1 00:00:00 ps
[root@client_sshd ~]# kill -15 2139 ##试图关闭shell脚本的进程
[root@client_sshd ~]# ps ##再次查看进程的相关信息
PID TTY TIME CMD
2139 pts/1 00:00:00 bash
2387 pts/1 00:00:00 ps
命令及结果如下图所示:
(5)暂停某个进程(不能被阻塞)
<1>让进程gedit直接在后台运行,并在文件里面写入一些内容,使用kill-19命令暂停gedit进程后,会发现无法在文件内写入内容
<2>试图暂停shell脚本,查看bash的pid后,利用kill -19命令将其暂停,由结果可知可以被暂停:
(6)运行暂停的进程
将进程gedit暂停后,使用kill -18命令运行进程,发现运行后便可以在文件内继续写入内容
(7)把进程打入后台(可以被阻塞)
<1>让进程gedit直接在后台运行,并在文件里面写入一些内容,使用kill-20命令暂停gedit进程后,会发现无法在文件内写入内容:
将进程gedit暂停后,使用kill -18命令运行进程,发现运行后便出现了之前在文件内写入的内容
<2>试图暂停shell脚本,查看bash的pid后,利用kill -20命令将其暂停,由结果可知不可以被暂停:
(8)试图删除student用户下的所有进程,使用的命令是pkill -u student -信号
6.进程的动态监控
top
按键 | 含义 |
---|---|
1 | 显示cpu |
s | 调整刷新 |
c | CPU负载排序 |
m | 内存使用量排序 |
h | 查看帮助 |
u | 查看指定用户进程 |
k | 对指定进程发起信号 |
q | 退出 |
<1>输入top命令,显示的结果如下:
<2>输入top命令后按1,显示的结果如下:
<3>输入top命令后按s,2,显示的结果如下:
总结:进程会2s刷新一次
<4>输入top命令后按c,显示的结果如下:
<5>输入top命令后按m,显示的结果如下:
<6>输入top命令后按h,显示的结果如下:
<7>输入top命令后按u,显示的结果如下:
分析:默认是超级用户,若想要查询别的用户的,在Which user后写入想要查询的用户名称
<8>输入top命令后按k,显示的结果如下:
分析:
PID to signal/kill [default pid = 25] ##输入进程号
Send pid 4200 signal [15/sigterm] ##输入信号
<9>输入top命令后按q,显示的结果如下:
7.控制服务
1.什么是服务
cs模型,c表示client,s表示server
定义:系统中运行的对于系统本身没有意义,但是对客户主机有重大意义的程序叫做服务性软件,简称服务
2.用什么控制服务
系统初始化进程可以对服务进行相应的控制
3.当前系统初始化进程是什么
systemd ##系统初始化进程
pstree ##显示系统中的进程树
4.进程控制命令
ssh(client) ----->sshd(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 mask sshd | 对服务进行解锁 |
systemctl unmask sshd | 对服务进行锁定 |
systemctl list-units | 列出已经开启服务当前状态 |
systemctl list-unit-files | 列出所有服务开机启动的状态,disable,enable |
systemctl list-dependencies | 列出服务的依赖 |
systemctl set-default multi-user.target | 设定系统启动级别为多用户模式(无图形) |
systemctl set-default graphical.target | 设定系统启动级别为图形模式 |
<1>关闭服务并查看服务状态
<2>开启服务并查看服务状态
<3>先查看服务状态,再重启服务后对服务状态进行查看
总结:会发亮两次的服务进程发生了改变
<4>当服务开启时,设定服务开机启动并查看服务状态
<5>当服务开启时,设定服务开机不启动并查看服务状态
<6>当关闭服务时,真实主机将无法与客户端(172.25.254.128)进行网络连接
<7>当再次开启服务时,真实主机可以与客户端(172.25.254.128)进行网络连接
<8>当服务关闭时,设定服务开机不启动并查看服务状态
<9>当服务关闭时,设定服务开机启动并查看服务状态
<10>列出已经开启服务当前状态
<11>列出所有服务开机启动的状态,disable,enable
<12>对服务进行锁定
注意:当服务关闭时才需要进行锁定
<13>对服务进行解锁,只有解锁后才可以正常开启服务
<14>设定系统启动级别为多用户模式(无图形)
<15>设定系统启动级别为图形模式,需在无图形中输入命令