1.进程的定义
定义:程序时静态的代码文件,进程是指程序运行时的状态,是程序的一个副本,进程是有生命周期的(准备区、运行期、终止期)
(1)进程与线程
进程是资源调用的最小单位,线程是进程的最小单位,程序执行流是从上到下贯穿运行的
当进程是多任务物,cpu是多核心,多任务应该同时被每个核心处理,每个核心处理的任务叫线程,线程资源是共享的
(2)进程状态
R(TAKS_RUNNING) 可执行态
S(TASK_INTRRUPTABLE) 可唤醒休眠
D(TASK_UNINTRRUPTABLE) 不可唤醒休眠
T(TASK_STOP) 暂停状态
Z(EXIT_ZOMBIE) 僵死态
2.进程查看命令
(1)进程查看
gnome-system-monitor 图形进程查看工具
ps 进程查看
ps a 与终端相关的进程
ps x 与终端无关的进程
ps ax 所有进程
ps axu 用户信息归类的所有进程
上图中,USER表示进程所有人,PID表示进程id,%CPU表示cpu占有率,%MEM表示内存占有率,VSZ表示进程使用的虚拟内存的大小,RSS表示进程常驻内存中的数据大小,TTY表示进程用到的终端,STAT表示进程状态,START表示进程运行时长,TIME表示进程占用cpu时长,COMMAND表示进程名称
ps axo pid 只显示pid的所有进程
ps axo pid,&cpu 显示pid和cpu占有率的所有进程
ps -e 显示所有进程
ps -ef 显示所有进程的完整格式
ps axf 显示所有进程的层级关系
ps -eH 显示所有进程的层级结构
ps ax --sort=+%cpu 将所有进程按cpu占有率升序排列
ps axo %cpu--sort=-%cpu 将只显示cpu占有率的所有进程按cpu占有率降序排列
(2)进程过滤
<1> pgrep和pidof命令
pgrep -u 0 显示uid为0的进程
pgrep -U user 显示指定用户名的进程
pgrep -t tty 显示指定终端的进程
pgrep -l 显示进程名称
pgrep -a 显示进程完整名称
pgrep -lU westos 显示westos用户的进程并显示进程名称
pgrep -at pts/0 显示pts/0终端的进程并显示进程完整名称
pidof xxx 查看xxx的pid
pgrep -P pid 显示进程的子进程
运行以下命令
ps 查看当前shell的pid
vim & vim后台运行
pidof vim 查看vim的pid
运行结果如下
查询到当前shell的pid为11826,vim的pid为11870
pgrep -P 11826 查看pid为11826的进程的子进程
运行结果如下
发现此id与之前查询到vim的pid相等
<2> top命令
top -b -n 1 以批次方式显示,批次数量为1
注:top命令为动态显示进程
top命令打开后的显示界面如下图所示
其中第一行的load average分别表示系统1min、5min、15min处理任务的时间
第二行total表示任务总量,running表示正在运行的任务数,sleeping表示休眠任务数,stopped表示被暂停任务数,zombie表示僵死任务数
第三行us表示用户空间,sy表示内核空间,ni表示nice值调整时间,id表示空闲时间,wa表示等待io时间,hi表示处理硬件中断时间,si表示处理软件中断时间,st表示vm使用时间
第四行total表示内存总量,free表示空闲内存,used表示占用内存,buff/cache表示缓存
第五行MiB Swap表示交换分区用量
注:在进入top命令界面后,可进行一些内部操作来调整进程显示,如:
P cpu排序(降序)
M 内存排序(降序)
T 占用cpu时间排序(降序)
l 关闭/开启uptime信息
未执行 l 操作前
执行 l 操作后
t 关闭/开启cpu&task
未执行 t 操作前
执行t操作后
s 指定刷新频率(默认3s)
上图修改刷新频率为1s
k 操作进程
u 查看指定用户进程
3.进程优先级
意义:系统是多任务多用户的操作模式,任务的重要性是有区分的,如何来确定不同任务的重要性呢?引入“优先级”这个概念就是来让系统明确不同任务的重要性
范围:0—139 内核自控优先级范围:0—99 用户可控优先级范围:100—139
符号含义: S sleeping < 优先级高 s 顶级进程
T stop N 优先级低 R running + 运行在前台
(1)nice命令
范围:-20—19
renice -n -5 xxxxx 更改xxxxx的优先级为-5
nice -n -5 cat 指定-5的优先级打开cat进程
操作步骤:
<1> 实验对象的准备
vim & vim后台运行
ps ax -o pid,nice,comm | grep vim 查看vim的pid、nice值和名称
运行结果如下:
发现vim的pid为2961,nice值为0
<2> 修改vim的nice值
renice -n -10 2961 更改pid为2961进程的nice值为-10
ps ax -o pid,nice,comm | grep vim
运行结果如下:
发现vim的nice值已经被更改为-10
执行以下命令强制结束vim进程 killall -9 vim
nice -n 5 vim & 指定vim优先级为5并后台运行vim
ps ax -o pid,nice,comm | grep vim
运行结果如下
发现vim的优先级已经被更改为5
4.进程前后台调用
ctrl + z 把占用shell的进程打入后台挂起 bg 把后台挂起的进程运行起来
fg 把后台进程调回前台 & 运行进程在后台 jobs 查看当前shell中在后台的所有工作
输入以下命令
cat & 后台运行cat
vim & 后台运行vim
jobs
运行结果如下:
发现cat和vim均在后台挂起
5.进程信息号及控制工具
(1)进程信号
1 重新家在系统配置文件(source)
2 清空内存中的进程数据
3 清空内存中的鼠标(ctrl+\)
9 强行结束进程(不能被阻塞)
15 正常关闭进程(会被阻塞)
18 运行被暂停的进程
19 暂停进程(不会被阻塞)
20 暂停进程(会被阻塞的)
(2)控制工具
kill 进程信号 pid
killall 进程信号 进程名字
pkill 进程信号 进程条件
(3)实验验证
vim &
ps
运行结果如下图所示
可知当前shell的pid为4090,vim的pid为4119
然后重新打开一个shell,执行以下命令:
kill -15 4090
ps
运行结果如下:
发现无法关闭shell,若执行 kill -9 4090,运行结果如下:
上图显示成功关闭shell
vim &
vim &
ps
运行结果如下图所示
若运行 killall -9 vim 及 ps ,结果如下:
发现所有进程名为vim的进程均被强制关闭
6.systemd守护进程
(1)搭建实验环境
nodea虚拟机 ip地址:192.168.2.66
nodeb虚拟机 ip地址:192.168.2.88
在nodea虚拟机的shell中执行以下命令
ping 192.168.2.88 连接到192.168.2.88
运行结果如下
证明两虚拟器网络已连接
(2)远程操作主机
ssh 远程主机ip -l 远程主机用户
注:在nodea虚拟机的shell中执行以下命令
ssh -l root 192.168.2.88
运行结果如下:
此时表明远程主机登录成功
再输入以下命令
cd /root/Desktop
touch file
运行结果如下:
发现在nodea的shell中输入的新建文件命令,文件新建在了nodeb的桌面上,表明远程连接主机成功,可进行基本文件管理
(3)守护进程
定义:替内核分担程序控管的程序,通常pid为
符号:systemd ——— systemctl
<1> systemctl 管理系统服务
服务的定义:在系统中开启的共享系统资源到网络中的程序
systemctl用法:
systemctl status sshd //查看sshd的状态
运行以下命令
systemctl stop sshd //关闭sshd
systemctl status sshd
运行结果如下:
运行以下命令
systemctl start sshd //开启sshd
systemctl status sshd
运行结果如下:
运行以下命令
systemctl disable sshd.service //设定服务开机不启动
systemctl status sshd
运行结果如下:
运行以下命令
systemctl disable --now sshd //设定服务当前不启动
systemctl status sshd
运行结果如下:
运行以下命令
systemctl enable sshd //设定服务开启启动
systemctl status sshd
运行结果如下:
运行以下命令
systemctl enable --now sshd //设定服务当前启动
systemctl status sshd
运行结果如下:
systemctl list-units //查看系统所有服务当前状态
systemctl list-unit-files //查看服务开机状态
systemctl list-dependencies //列出服务依赖性
systemctl list-dependencies sshd //列出sshd服务依赖性
运行以下命令
systemctl mask sshd //冻结sshd服务
systemctl start sshd
systemctl status sshd
运行结果如下:
发现无法开启sshd,运行以下命令
systemctl unmask sshd.service //解锁sshd服务
systemctl start sshd
systemctl status sshd
运行结果如下:
发现sshd已解锁,可正常开启sshd systemctl set-default multi-user.target //开启无图形网络模式
systemctl set-default graphical.target //开启有图形网络模式
运行以下命令
systemctl get-default //查看系统运行模式
运行结果如下:
可知当前运行模式为有图形网络模式,也可用以下命令查看系统运行模式
runlevel
运行结果如下:
其中,0-PEWEROFF 1-single 2-noG+NETWROK 3.4.5-G+NETWORK 6-REBOOT
表明系统当前运行模式为有图形网络模式
7.系统中的登录审计
w -i //查看正在登录此系统的用户及ip地址
last //查看使用过此系统的用户及ip地址
lastb //查看试图登录此系统但未成功的用户及ip地址
实验操作步骤:
<1> 正在登录的用户查看
运行以下命令,使nodea的用户登录到nodeb系统中
ssh -l root 192.168.2.88
正确输入nodeb的密码之后,成功登录,运行结果如下:
此时,在nodeb的shell中执行 w -i 命令,运行结果如下:
可看到nodea的用户名及ip地址,此信息存放在/run/utmp中,若执行以下命令
> /run/utmp //删除/run/utmp中的内容
w -i
运行结果如下:
发现nodea用户的登录记录消失
<2> 使用过此系统的用户记录查看
先将nodea用户退出nodeb系统,执行 exit 命令,运行结果如下:
此时在nodeb的shell中执行 last 命令,运行结果如下:
发现一条nodea用户的登录用户名及其ip地址,此信息存放在/var/log/wtmp,再执行以下命令
> /var/log/wtmp //删除/var/log/wtmp中的内容
last
运行结果如下:
发现nodea用户的登录记录已经消失
注:此命令只能查看已登录过的用户记录,无法查看正在登录的用户记录
<3> 试图登录但未成功的用户记录查看
在nodea的shell中执行命令 ssh -l root 192.168.2.88 ,并错误的输入nodeb系统用户的密码,运行结果如下:
此时,在nodeb的shell中执行命令 lastb 运行结果如下:
发现3条nodea用户的登录失败记录,此信息存放在/var/log/btmp中,执行以下命令
> /var/log/btmp 删除 /var/log/btmp的内容
lastb
运行结果如下:
发现nodea用户的登录失败记录消失