9.Linux服务与进程管理
前言
随着前面那些命令的学习及掌握,我们的教程也逐渐来到了尾声,我相信大家也渐渐的可以使用Linux操作系统,这节课就给大家讲讲服务与进程的管理,让大家对Linux系统的运行有个初步的认识和理解
进程
基本概念
我们先来看下什么是进程?
Linux中每个执行的程序都称为一个进程,且每个进程都会都会对应一个进程ID(PID)
进程可以以两种方式存在:
- 前台:用户当前屏幕正在操作的进程
- 后台:用户实际在操作,但屏幕上未显示
如果一个进程是由另一个进程创建的,则称该进程为创建它的进程的子进程,称创建其的进程为它的父进程
如果一个完成了生命周期但却依然留在进程表中的进程,我们称之为 僵尸进程
如果一个进程以后台进程形式常驻系统中并提供系统服务,我们则称之为守护进程
创建进程
前台进程
前台进程指在终端中运行的进程,一旦这这终端关闭,这个进程也会随之消失,当然我们也可以通过Ctrl + C来终止进程
我们写个简单的程序体会一下
#!/bin/bash
while true
do
echo `date`
sleep 1
done
为其加上执行权限并执行,可以看到每隔一秒会向屏幕打印一下时间
chmod +x start.sh && ./start.sh
我们结束进程然后将输出重定向到1.txt
./start.sh > 1.txt
我们另起一个终端来监听1.txt,可以看到每隔一秒文件会多一行内容,说明我们的start.sh在执行
tail -f 1.txt
我们关闭start.sh那个终端,再来看监听的这边,可以看到文件中已经没有内容输出了
我们还可以在前台进程执行时使用Ctrl + Z将其挂起到后台,但这个时候进程会被暂停,可以看到屏幕上输出了一个序号,我们可以使用这个序号用fg切换该进程到前台,当然我们也可以使用bg将一个后台暂停的进程变为后台执行

我们也可以通过jobs命令来查看被我们挂到后台的进程

这里总结了个表格大家可以看看
| 操作 | 说明 |
|---|---|
| Ctrl + Z | 可以把这个进程放到后台执行,但进程会被暂停 |
| jobs | 查看当前有多少在后台运行的进程.它是一个作业控制命令 |
| fg | 将后台中的命令调至前台继续运行是通过,参数是 jobs 命令查到的后台正在执行的命令的序号(不是 pid) |
| bg | 将一个在后台暂停的命令,变成继续执行,参数是 jobs 命令查到的后台正在执行的命令的序号(不是 pid) |
后台进程
后台进程也叫守护进程,是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件,开启进程后台运行的方式有三种:
- 在执行的命令后面添加
&符号 - 利用
ctrl + z和bg搭配 - 使用
nohup的方式后台运行进程(常用)
分别使用上述三种方法后台启动start.sh,可以使用kill -9 pid终止一个进程
./start.sh > 1.txt &
./start.sh > 1.txt
ctrl + z
bg 1
nohup ./start.sh > 1.txt
进程相关命令
ps[查看进程]
Linux ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器,有如下参数:
| 选项 | 含义 |
|---|---|
| -a | 显示所有终端机下该用户执行的进程 |
| a | 显示现行终端机下的所有进程,包括其他用户的进程 |
| -A,-e | 显示所有进程 |
| e | 列出进程时,显示每个进程所使用的环境变量 |
| -f | 显示UID,PPIP,C与STIME栏位 |
| f | 用ASCII字符显示树状结构,表达进程间的相互关系 |
| u | 以用户为主的格式来显示进程状况,增加列 User、%CPU、%MEM、VSZ、RSS等 |
| -u<用户名> | 按用户名筛选进程 |
| x | 显示所有进程,不以终端机来区分 |
看完这个参数表我们来理解这些参数的含义,对比下输出,我们就知道为什么你经常在网上的贴子中有看到ps aux了
ps -a
ps a
ps -x
ps ax
# 可以给上述命令加上u参数来看执行进程和用户
我们不难发现,当我们执行ps ax时我们可以看到所有用户的所有进程,这个时候再加上参数u就可以显示这些进程和详细信息了
这时有人要说了-A或-e参数本身不就是这样吗?对的,但如果我们需要打印详细信息时就会有问题,因为aux这三个参数都是不加-的,所以我们可以写在一起,但如果使用-e或-A,命令就成了ps -A u或ps -e u,我们就需要区别加-的参数和不加的参数,所以一般-A和-e与-f一起使用ps -ef或ps -Af,而ax与u一起使用ps aux
为什么网上很多人都写-aux,这是因为Linux命令参数一般会加上-,但-aux中u如果加-必须要配合参数使用,但我们又没有给参数,所以这里就是不带-的u,这里aux又是放到了一起,所以这里以u为主,都不加-,比如我们执行ps -eu也是如此,它调用的是不加-的e参数而非-e,所以就打印出了环境变量,而-A这里因为没有对应的不加-的参数,所以执行ps -Au会报错
ps进程表字段说明
| 字段名 | 含义 |
|---|---|
| USER,UID | 用户名 |
| PID | 进程 ID |
| PPID | 父进程 ID |
| %CPU,C | cpu使用率 |
| %MEM | 内存占用率 |
| VSZ | 占用的虚拟内存,单位 KB |
| RSS | 占用的物理内存,单位 KB |
| TTY | 使用的终端: ? 表示与终端无关;pts/0 表示由网络连接的进程 |
| START | 进程启动时间 |
| TIME,STIME | 进程占用 CPU 的总时间,单位分钟(00:05 表示5分钟) |
| COMMAND,CMD | 进程启动时的命令行 |
| STAT | 进程状态,具体含义如下 |
进程STAT状态含义:
- D: 无法中断的休眠状态 (通常 IO 的进程)
- R: run,正在执行中
- S: sleep,静止状态
- T: 暂停执行
- Z: 不存在但暂时无法消除
- W: 没有足够的记忆体分页可分配
- <: 高优先序的行程
- N: 低优先序的行程
- L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
- s:进程的领导者,其下有子进程
- |:多线程,克隆线程
- +:位于后台的进程组
pstree[查看进程树]
Linux pstree(英文全称:display a tree of processes)) 命令将所有进程以树状图显示,树状图将会以 pid (如果有指定) 或是以 init 这个基本进程为根 (root),如果有指定使用者 id,则树状图会只显示该使用者所拥有的进程
pstree [-a] # 显示该进程的完整指令及参数
top[实时进程动态]
Linux top命令用于实时显示 process 的动态,有如下参数
| 选项 | 含义 |
|---|---|
| d | 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s |
| n | 更新的次数,完成后将会退出 top |
| p | 显示指定进程id的进程信息 |
| i | 忽略僵尸进程 |

时间行
| 选项 | 含义 |
|---|---|
| top | 当前时间 |
| up | 系统运行时间 |
| users | 当前登录用户数量 |
| load average | 负载均值 |
进程统计
| 选项 | 含义 |
|---|---|
| total | 总计进程数 |
| running | 运行中进程数 |
| sleeping | 睡眠中进程数 |
| stop | 停止进程数 |
| zombie | 闲置/僵尸进程数 |
内存行
| 选项 | 含义 |
|---|---|
| total | 总共 |
| used | 使用中 |
| free | 空闲 |
| buffers/cache | 缓存/缓冲 |
CPU 行/交换行
| 选项 | 含义 |
|---|---|
| us (user space) | 用户占用 cpu率 |
| sy (system) | 系统占用 cpu率 |
| ni (nice) | 改变过优先级的进程占用CPU的百分比 |
| id (idolt) | 空闲CPU率 |
| wa (wait) | IO等待占用CPU的百分比 |
| hi (Hardware IRQ) | 硬中断占用CPU的百分比 |
| si (Software Interrupts) | 软中断占用CPU的百分比 |
字段说明
| 字段名 | 含义 |
|---|---|
| PID | 进程id |
| USER | 进程所有者 |
| PR | 进程优先级 |
| NI | nice值。负值表示高优先级,正值表示低优先级 |
| VIRT | 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
| RES | 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
| SHR | 共享内存大小,单位kb |
| S | 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
| %CPU | 上次更新到现在的CPU时间占用百分比 |
| %MEM | 进程使用的物理内存百分比 |
| TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
| COMMAND | 进程名称(命令名/命令行) |
kill[终止进程]
kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序
kill [-<信息名称或编号>][程序]
进程编号信息:
- 1 (HUP):重新加载进程。
- 9 (KILL):杀死一个进程。
- 15 (TERM):正常停止一个进程
lsof[端口占用查看进程]
lsof(list open files)是一个列出当前系统打开文件的工具,通常用其查看某个端口被那个程序占用
lsof -i[:端口号]
# 不加端口号查看所有
我们可以先后台运行一个redis-server,然后再启动redis-server,发现提示6379端口被占用
这个时候我们就可以用lsof -i:6379来查看6379被那个进程占用了,kill掉该进程然后我们又能启动redis-server了
服务
基本概念
服务的本质其实就是后台进程,即守护进程,一般情况下随系统启动而启动,在CentOS7中采用systemd管理服务,一般情况下每个服务会对应一个*.service文件,目录在/usr/lib/systemd/system下
systemctl[管理服务]
基本上服务的管理都是通过systemctl命令来完成的,可以管理服务状态,开机是否启动等
systemctl [option] [service_name]
# 不加任何参数则为列出系统所有服务
| 选项 | 参数 |
|---|---|
| start | 启动服务 |
| stop | 停止服务 |
| restart | 重启 |
| reload | 不关闭服务的情况下,重新读取服务配置文件 |
| enable | 开机启动 |
| disable | 开机不启动 |
| status | 查看指定服务状态 |
比如我们可以查看防火墙的状态
systemctl status firewalld
练习:关闭防火墙
这里就在Linux上安装nginx,然后由于防火墙的原因我们无法访问nginx,我们就只可以关闭防火墙访问,然后取消访问墙的开机自启,重启Linux,启动nginx再次防问
scp远程复制
scp是 secure copy 的缩写,用于 Linux 之间复制文件和目录,在linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令
scp [options] file_source file_target
# 这里的文件路径为远程文件地址 用户名@ip:/文件路径
| 选项 | 参数 |
|---|---|
| -P | 注意是大写的P, port是指定数据传输用到的ssh端口号 |
| -p | 保留原文件的修改时间,访问时间和访问权限 |
| -r | 递归复制整个目录 |
拷贝电脑上的任意文件到linux上
scp lengwen@192.168.31.105:/Users/lengwen/Desktop/nginx-1.18.0.tar.gz .
拷贝Linux上的任意文件到电脑上
scp 1.txt lengwen@192.168.31.105:/Users/lengwen/Desktop/
rz/sz上传下载
因为termius不支持rz/sz,我Mac上自带的终端也不支持,这个大家自己下去试试
sftp上传
现在大部分ssh工具都不支持rz/sz的原因就是因为有了sftp,termius中也是支持的,但rz/sz在很多时候也是替代不了的,比如你们公司内网的服务器可能都是使用跳板机登录的,自己的电脑和内网的服务器网络不可达,所以sftp这种方式就不可以用了

实战开始
-
下载nginx源码包:nginx
-
上传解压
tar zxvf nginx-1.18.0.tar.gz
- 安装依赖
yum -y install pcre-devel
yum install ‐y zlib zlib‐devel
yum -y install openssl openssl-devel
- 检查环境
./configure
- 编译安装
make && sudo make install
- 启动nginx
cd /usr/local/nginx/sbin && sudo ./nginx
- 查看进程
ps -ef | grep nginx
- 使用
curl命令访问127.0.0.1,发现返回了nginx的index.html的文件
curl 127.0.0.1
- 本机浏览器访问Linux的ip,发现访问不了,这是因为有防火墙,我们关闭下
systemctl stop firewalld
- 浏览器重新访问

- 开机重启nginx再次访问
- 取消防火墙的开机自启
systemctl disable firewalld
- 重启
小结
这节课主要带大家学习了下服务和进程的相关概念,进程那里在工作中用到的也挺多的,因为我们开发中把程序部署到服务器上后需要观察服务的运行情况等信息,大家可以好好记一下

浙公网安备 33010602011771号