1、进程的定义
首先要分清进程和程序的区别,程序是静态的代码文件,而进程是指程序运行时的形态,进程是有生命周期的,分为准备期,运行期和终止期。线程是进程的最小单位,当进程是多任务,cpu是多核心时,多任务应该同时被每个核心处理,每个核心处理的任务叫线程,但是如果时单核心,线程就没有意义了。进程一般有五种状态:
(1)R(TAKS_RUNNING) 表示可执行态
(2)S(TASK_INTRRUPTABLE) 表示可唤醒休眠
(3)D(TASK_UNINTRRUPTABLE) 表示不可唤醒休眠
(4)T(TASK_STOP) 表示暂停状态
(5)Z(EXIT_ZOMBIE) 表示僵死态
2、进程查看命令
(1)我们可以使用gnome-system-monitor
命令跳出任务管理器,里面可以查看各种进程,但是必须是有图形的才可以。
(2)然后,我们还可以直接使用ps
命令,它可以简单查看进程信息,查看如图,显示了进程id,进程用到的终端,时间,进程名称。
想查看详细的进程信息,后面需要跟参数,一般有两类,一种是UNIX的风格没有-
的,一种是GNU风格有-
的,两种都可以使用。
参数 | 含义 |
---|---|
a | 与终端相关的进程 |
x | 与终端无相关的进程 |
u | 用户信息归类的查看方式 |
f | 进程层级关系 |
o | 显示指定参数,后面可以加pid,comm,nice,pri,pcpu,ppid,stat,user,group等 |
参数 | 含义 |
---|---|
-e | 显示所有进程 |
-f | 显示信息的完整格式 |
-H | 显示进程的层级结构 |
-o | 显示指定参数 |
–sort= | 排序,后面加参数X,就是按照X排序 |
下面做实验测试上面参数的效果,第一个图当使用ps ax
,表示查看与终端相关和与终端无关的进程,即全部进程。各项参数含义如下,PID表示进程id,TTY表示进程用到的终端,STAT表示进程的状态,TIME表示进程占用cpu时长,COMMAND表示进程名称。
第二个图查看进程的层级关系
第三个图代表查看与终端相关和无关的进程,显示cpu占用,内存占用,进程名称和命令名称,并按照内存的大小进行降序排列。
(3)进程太多,无法找到想查看的进程?可以使用pgrep
命令来过滤进程。
<1>pgrep -u uid
显示指定用户进程
<2>pgrep -U user
显示指定用户进程
<3>pgrep -t tty
显示指定终端进程
<4>pgrep -l
显示进程名称
<5>pgrep -a
显示进程的完整名称
<6>pgrep -P
显示进程的子进程
实验测试如下,我们使用su
切换到westos用户,使用cat
命令,重新打开一个shell,由于westos用户uid是1000,pgrep -u 1000
显示westos用户的进程,纯数字,想看名称可以使用pgrep -lu 1000
或pgrep -lU westos
,可以看出一个shell的进程4489,一个cat的进程4519。pgrep -lt pts/1
查看终端和名称,pgrep -alt pts/1
表示显示进程的完整名称。pgrep -P 3015
显示进程3015的子进程。
(4)top
,可以动态查看进程,如图。第一行从左到右表示:系统时间,运行时长,系统中有一个用户登陆,平均加载时间。第二行从左到右表示:任务总量,正在运行状态,休眠人物数量,被暂停数量,僵尸人物数量。第三行从左到右表示:CPU用户空间,内核空间,nice值调整时间,空闲时间,等待时间,处理硬件中断时间,处理软件中断时间, 被偷走的时间(一般指虚拟机使用时间)。
第四行从左到右表示:内存总量,内存空闲,占用,缓存(buff指缓存将要写入硬盘的数据,cache指硬盘将要加载到内存里的数据)。第五行从左到右表示:交换分区用量总量,空闲,占用,有效内存。
那么top都会显示进程的什么信息呢?除了上面说过的,还有USER进程所有者的用户名,PR优先级,NI表示nice值(负值表示高优先级,正值表示低优先级),VIRT进程使用的虚拟内存总量(单位kb),RES进程使用的、未被换出的物理内存大小,SHR共享内存大小,S进程状态,%CPU上次更新到现在的CPU时间占用百分比,%MEM进程使用的物理内存百分比。
top
命令的内部指令有很多:
内部指令 | 功能 |
---|---|
P | cpu排序 |
M | 内存排序 |
T | 累计展示cpu时间排序 |
l | 关闭/开启uptime信息 |
t | 关闭/开启cpu&task |
s | 指定刷新频率 |
k | 操作进程(后面要加数字,后面讲具体代表什么) |
u | 查看指定用户进程 |
当然也有top
命令的参数:
<1>top -d time
指定刷新频率
<2>top -b
以批次方式显示
<3>top -n number
指定显示的批次数量
3、进程的优先级
系统中有那么多进程,那么谁先谁后呢?需要根据任务的重要性进行排序,就有了优先级的概念,范围是 0–139,其中内核自控优先级范围是0-99,用户可控优先级是100-139,同时减120换算为nice值即-20-19。renice
命令可以更改优先级,如图实验,先建立监控watch -n 1 “ps ax -o nice,pid,stat,comm | grep cat”
,输入cat &
表示打开cat并打入后台(后面会讲解),刚开始他的优先级是0,中间的,使用renice -n -5 6387
把cat的优先级提高到-5。nice值数越小,优先级越高,同时状态栏会显示<
,表示高优先级。
同理,5是低优先级,状态栏位N。
当然也可以直接指定优先级打开进程,使用nice
命令,如图。
4、进程前后台调用
当打开某些进程时,会占用界面,导致无法有其他操作,这样就需要把进程打入后台,就可以输入其他命令了。
(1)<ctrl>+<z>
把占用shell的进程打入后台挂起
(2)bg
把后台挂起的进程运行起来
(3)fg
把后台进程调回前台
(4)&
直接运行进程在后台
(5)jobs
查看当前shell中在后台的所有工作
测试如图,打开vim编辑器会占用窗口,<ctrl>+<z>
把占用shell的进程打入后台挂起,打开cat,<ctrl>+<z>
把占用shell的进程打入后台挂起,jobs
查看当前shell中在后台的所有工作,现在有两个,我们注意到,有个+-
号,可以理解为主次,+
为主,那有什么用呢?当我们想要把后台进程调回前台时,输入fg
,默认把cat调回来,但是一般使用时,我们需要fg 1/2
这样精确。
5、进程的信息号
进程的信息号有1-31,分别表示不同的含义,用man signal
可以查看分别是什么含义,如图,一般常用的有1
表示重新家在系统配置文件(不是重启,是重新加载,没有下线),2
清空内存中的进程数据,3
清空内存中的鼠标(ctrl \
),9
是强行结束进程(不能被阻塞),15
是正常关闭进程(会被阻塞),18
运行被暂停的进程,19
暂停进程(不会被阻塞),20
暂停进程(会被阻塞的)。
控制进程信号的工具有三个:
(1)kill 进程信号 pid
,如图测试,打开一个后台的vim,执行kill -9 7333
,表示结束7333进程。
(2)killall 进程信号 进程名字
,会对所有叫该名字的进程生效。测试如图,后台打开两个vim,执行killall -9 vim
所有的vim都被结束了。
(3)pkill 进程信号 进程条件
,测试如图,su切换到westos用户,此时使用pkill -9 -u westos
,把westos用户的进程全部结束。
6、systemd守护进程
我们的内核管理全部事物,包括硬件和软件,他很累,需要有一个替内核分担程序控管的程序,叫systemd守护进程。想象我们是运维人员,如果出了问题,我们必须去机房进行维护吗?一出问题就去机房,很显然是不现实的,所以我们需要远程登陆操作主机,通过systemctl
命令管理系统服务,服务指在系统中开启的共享系统资源到网络中的程序。说到共享,就是CS模型,即Client客户端和Service服务端。比如我们用微信这个软件,在我们这就是客户端,而在腾讯总部,就是服务端,允许我们使用。具体看systemctl
命令的用法:sshd是Secure Shell daemon对应服务端,ssh是Secure Shell 对应客户端。
(1)systemctl start sshd
开启
(2)systemctl stop sshd
关闭
(3)systemctl status sshd
查看状态
(4)systemctl reload sshd
重新加载(在这里相当于restart,也是关了再开)
(5)systemctl restart sshd
重新启动服务
(6)systemctl enable sshd
设定服务开机自启动
(7)systemctl enable --now sshd
设定服务开机自启动并当前马上开启服务
(8)systemctl disable sshd
设定服务开启不启动
(9)systemctl list-units
查看系统所有服务当前状态
(10)systemctl list-unit-files
查看服务开机状态
(11)systemctl list-dependencies
列出服务依赖性
(12)systemctl mask sshd
冻结服务
(13)systemctl unmask sshd
解冻
(14)systemctl get-default
查看系统运行模式(系统运行模式分为0-6,0表示POWEROFF,1表示single,2-4表示无图形模式,5表示有图形模式,6表示重启)
(15)systemctl set-default
设定系统运行模式
测试如图,查看sshd的状态,绿色已开启,红色框表示开机自启动。
如图查看服务开机状态,static表示不可控,disabled表示开机不启动。
如图查看服务的依赖性:
如图为常用命令的使用:
7、系统中的登陆审计
(1)w
显示正在远程登陆系统的账号
(2)last
远程登陆成功现在已经退出的
(3)lastb
试图远程登陆但未成功的