# 07.Linux-进程管理
# 1.基本介绍
(1)在 LINUX 中,每个执行的程序都称为一个进程。每一个进程都分配一个 ID 号(pid,进程号)。程序执行之后加载到内存中成为进程。程序是静态的,进程是动态的。
(2)每个进程都可能以两种方式存在:
前台与后台
前台进程:是用户目前的屏幕上可以进行操作的。
后台进程:是实际在操作的,但屏幕上无法看到,通常使用后台方式执行。
(3)一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束。
# 2.PS命令
基本介绍:ps命令是用来查看目前系统中,有哪些进程正在执行,以及它们执行的状况。可以不加任何参数。
1.ps -aux
语法:
ps [选项] Process Status
选项:
-a 显示当前终端的所有进程信息
-u 以用户的格式显示进程信息
-x 显示后台程序运行的参数
一般三个选项一起用:
ps -aux
显示出如下内容:
2
3
4
5
6
7
8
9
10
| 字段名 | 含义 | 补充说明 |
|---|---|---|
| USER | 执行进程的用户名称 | - |
| PID | 进程号 | 唯一标识一个进程 |
| %CPU | 进程占用 CPU 百分比 | 数值越高,占用 CPU 资源越多 |
| %MEM | 进程占用物理内存的百分比 | 反映进程对物理内存的占用程度 |
| VSZ | 进程占用的虚拟内存大小(单位:KB) | Virtual Memory Size,包含未实际占用物理内存的部分 |
| RSS | 进程占用的物理内存大小(单位:KB) | Resident Set Size,实际占用的物理内存 |
| TTY | 终端名称(有时缩写) | 如 pts/0 表示远程终端,? 表示无终端关联 |
| STAT | 进程状态 | S - 睡眠 s - 会话的先导进程 N - 低优先级进程 R - 正在运行 D - 短期等待(不可中断) Z - 僵死进程 T - 被跟踪 / 停止 |
| START | 进程执行的开始时间 | 格式通常为「时:分」或「月 / 日」(进程运行超过 1 天) |
| TIME | CPU 时间 | 进程使用 CPU 的总时间(不是进程运行时长) |
| COMMAND | 启动进程所用的命令和参数 | 过长会被截断显示 |
2.ps -ef
ps -ef 是以全格式显示当前所有的进程。
-e 显示所有进程。
-f 全格式。
ps -ef 指令显示内容如下:
2
3
4
5
| 字段名 | 含义 | 补充说明 |
|---|---|---|
| UID | 用户 ID | 进程所属用户的数字标识(对应 /etc/passwd 中的 UID) |
| PID | 进程 ID | 唯一标识一个进程的数字编号 |
| PPID | 父进程 ID 一个进程可以生成多个子进程,该进程称为父进程。 | 该进程的父进程编号(PPID 为 0 通常是内核进程) |
| C | CPU 优先级计算因子 | 数值越大 → CPU 密集型运算 → 执行优先级越低 数值越小 → I/O 密集型运算 → 执行优先级越高 |
| STIME | 进程启动时间 | 格式为「月 日 时:分」(如 Mar 19 08:30),进程运行超 1 天则不显示具体时间 |
| TTY | 完整的终端名称 | ? 表示无终端关联(后台进程),pts/0 表示远程终端,tty1 表示本地物理终端 |
| TIME | CPU 使用时间 | 进程占用 CPU 的总时长(格式 时:分:秒),非进程运行的实际时长 |
| CMD | 启动进程的命令和参数 | 完整命令(不会截断),方括号 [] 表示内核进程(如 [kthreadd]) |
3.应用实例
要求:以全格式显示当前所有的进程,查看进程的父进程。
ps -ef
查看 sshd 的父进程信息:知道一个父进程的pid就可以知道它的信息。
输入:ps -ef | grep sshd
得到第三列为1,即父进程ID=1
2
3
4
5
6
7
# 3.kill和killall
1.介绍
若是某个进程执行一半需要停止时,或是已经消耗了很大的系统资源时,此时可以考虑停止该进程。使用 kill 命令来完成此项任务。
2.基本语法
kill [选项] 进程号 (功能描述:通过进程号杀死/终止进程)
killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
使用killall,会将该进程的所有子进程也都删除/终止。
常用选项:
-9 表示强制终止进程
2
3
4
5
3.案例
案例 1:踢掉某个非法登录用户
kill 进程号
比如 kill 11421
假如使用tom登录,然后在图形界面打开终端写代码
假设认为tom是个非法用户,要踢掉它
先在图形界面写代码:ps -aux | grep sshd
sshd 是记载远程连接服务的配置文件
上述指令显示出了,远程登录的进程信息,从中看到了tom登录的进程的进程号11421
所以 kill 11421 这样tom就下线了!
案例 2:终止远程登录服务 sshd, 在适当时候再次重启 sshd 服务
sshd ---> secure shell
首先查看 sshd 对应的进程号:
使用命令:ps -aux | grep sshd
有 /user/sbin/sshd 的那个进程就是 sshd 服务进程 进程号10748
终止 sshd 之后,就无法在xshell远程登陆了!
重启 sshd 服务指令:
/bin/systemctl start 服务名称
/bin/systemctl start sshd.service
案例 3:终止多个 gedit (文本编辑器)
在Linux桌面,主文件夹中,打开多个文本,然后使用killall 可以同时关闭所有打开的文本
killall gedit
案例 4:强制杀掉一个终端
在Linux系统桌面打开两个终端,bash即代表终端进程
在一个终端中输入指令强制关闭另一个终端
首先:查看终端进程的进程号:ps -aux | grep bash
得到对应的进程号,输入:kill -9 对应的进程号
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 4.查看进程树 pstree
1.基本语法:pstree [选项]
功能:可以更加直观的来看进程信息(树的形式)
2.常用选项:
-p :显示进程的 PID (父进程ID)
-u :显示进程的所属用户
3.应用实例:
案例 1:用树状的形式显示进程的pid(进程号)
pstree -p
案例 2:用树状的形式显示进程的用户
pstree -u
2
3
4
5
6
7
8
9
10
11
12
13
14
# 5.服务管理
# 1.介绍
服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysqld , sshd防火墙等),因此我们又称为守护进程,是 Linux 中非常重要的知识点。
# 2.service管理指令
(1) service 服务名 [start | stop | restart | reload | status]
start 开启服务
stop 终止服务
restart 重启服务
reload 重载服务
status 查看服务的状态
(2) 在 CentOS7.0 后很多服务不再使用 service指令管理,而是使用 systemctl (后面专门讲)
(3) 还有一些在 /etc/init.d 下的服务仍使用 service 指令管理
案例:
请使用 service 指令,查看,关闭,启动 network
[注意:在虚拟系统打开终端演示,因为网络连接会关闭]
指令:
service network status
service network stop
service network start
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 3 .查看服务名的方式
方式 1:直接输入 setup 即可看到所有服务
其中前面带 * 的服务会随着Linux系统的启动而自动启动。
方式 2: ls -al /etc/init.d
只能看到部分服务:还有一些在 /etc/init.d 下的服务仍使用 service 指令管理
# 4.服务的运行级别
Linux 系统有 7 种运行级别(runlevel):常用的是级别 3 和 5
运行级别 0:系统停机状态,系统默认运行级别不能设为 0,否则不能正常启动
运行级别 1:单用户工作状态,root 权限,用于系统维护,禁止远程登陆
运行级别 2:多用户状态(没有 NFS),不支持网络
运行级别 3:完全的多用户状态(有 NFS),无界面,登陆后进入控制台命令行模式
运行级别 4:系统未使用,保留
运行级别 5:X11 控制台,登陆后进入图形 GUI 模式
运行级别 6:系统正常关闭并重启,默认运行级别不能设为 6,否则不能正常启动
开机的流程说明:
开机==>BIOS(开机检测,初始化)==>/boot(根目录)==>systemd进程1(第一个进程)==>运行级别==>运行级别对应服务
# 5.chkconfig指令
通过 chkconfig 命令可以给服务在 各个运行级别 设置开启自启动/关闭自启动
注意: Centos7.0 后,很多服务使用 systemctl 管理
chkconfig 基本语法:
(1)查看服务和服务在各个级别是开启/关闭自启动 (有限,只能查看chkconfig管理下的服务)
chkconfig --list [| grep xxx] (若查找某一个服务使用grep过滤)
(2)chkconfig 服务名 --list
(3)chkconfig --level 5 服务名 on 给该服务在5运行级别开启自启动
chkconfig --level 5 服务名 off 给该服务在5运行级别关闭自启动
案例演示: 对network服务进行各种操作,把 network 在 3 运行级别 关闭自启动
chkconfig --level 3 network off
注意:chkconfig 重新设置服务后自启动或关闭,需要重启机器 reboot 生效.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 6.systemctl
1.基本语法:systemctl [start | stop | restart | status] 服务名
systemctl 指令管理的服务在 /usr/lib/systemd/system 查看
2.设置服务的自启动状态
systemctl list-unit-files [ | grep 服务名] (查看服务开机启动状态, grep 可以进行过滤)
systemctl enable 服务名 (设置服务开机自启动)
systemctl disable 服务名 (关闭服务开机自启动)
systemctl is-enabled 服务名 (查询某个服务是否是自启动的)
centos7之后运行级别只有3和5,所以以上指令对3和5运行级别同时适用。
应用案例:
查看当前防火墙的状况,关闭防火墙和重启防火墙 firewalld.service
查看当前防火墙情况:systemctl status firewalld
关闭防火墙:systemctl stop firewalld
重启防火墙:systemctl start firewalld
.service写不写都行
注意:关闭或者启用防火墙后,立即生效。
但是 这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置。
如果希望设置某个服务自启动或关闭永久生效
要使用 systemctl [enable|disable] 服务名
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 7.firewall指令
指令
(1) 打开端口: firewall-cmd --permanent --add-port=端口号/协议
通过 netstat -anp | more 指令查看端口号的协议 (more 分页显示)
该指令输出的信息中:
Local Address下是 ip地址:端口号
Proto 是协议 (protocol 协议)
(2) 关闭端口: firewall-cmd --permanent --remove-port=端口号/协议
注意:无论是打开端口还是关闭端口,要重新载入才能生效
重新载入:firewall-cmd --reload
(3) 查询端口是否开放: firewall-cmd --query-port=端口/协议
2
3
4
5
6
7
8
9
10
11
12
13
应用案例
(1) 启用防火墙,测试 111 端口是否能 telnet (远程登录) 不行
在本地主机DOS命令窗口输入:telnet Linux虚拟机ip地址:端口号
测试本地主机能否访问虚拟机的111端口
telnet 192.168.200.130 111
(2) 开放 111 端口
firewall-cmd --permanent --add-port=111/tcp ;
需要 firewall-cmd --reload
(3) 再次关闭 111 端口
firewall-cmd --permanent --remove-port=111/tcp
需要 firewall-cmd --reload
2
3
4
5
6
7
8
9
10
11
12
13
# 6.top指令-动态监控进程
1.介绍
top 与 ps 命令很相似。它们都用来显示正在执行的进程。
top 与 ps 最大的不同之处在于: top 在执行一段时间可以更新正在运行的的进程。
2.语法
top [选项]
选项说明:
-d 秒数 功能:指定top命令每隔几秒更新,默认3s
-i 功能:使top不显示任何闲置和僵死进程
-p 功能:通过监控进程id来仅仅监控某个进程的状态
2
3
4
5
6
输入top指令后:每一条都是一个进程
显示:
| 行号 | 字段 | 含义 | 补充说明 |
|---|---|---|---|
| 第一行 | 当前时间 | 系统当前时间 | - |
| 系统运行时间 | 系统从开机到现在的持续运行时长 | 格式如 up 2 days, 14:30 | |
| 用户数 | 当前登录系统的用户数量 | - | |
| load average | 系统平均负载 | 判断规则:(三个值相加 ÷ 3) > 0.7 → 系统负载过大,需优化性能 | |
| 第二行 | Tasks | 系统总任务数 | - |
| running | 正在运行的进程数 | - | |
| sleeping | 休眠的进程数 | - | |
| stopped | 终止的进程数 | - | |
| zombie | 僵死进程数 | 已结束但父进程未回收资源的进程,需清理以释放内存 | |
| 第三行 | %Cpu(s) | CPU 占用百分比 | - |
| us | 用户态进程占用 CPU 比例 | - | |
| sy | 内核态进程占用 CPU 比例 | - | |
| id | 空闲 CPU 比例 | 数值越高,说明 CPU 越空闲 | |
| 第四行 | MiB Mem | 物理内存使用情况(单位 MiB) | - |
| total | 总物理内存大小 | - | |
| free | 空闲内存大小 | - | |
| used | 已使用内存大小 | - | |
| 第五行 | MiB Swap | 交换分区(虚拟内存)使用情况 | - |
| total | 交换分区总大小 | - | |
| free | 未使用的交换分区大小 | - | |
| used | 已使用的交换分区大小 | - | |
| avail Mem | 可用内存大小 | 可分配给新进程的内存(含空闲 + 可回收缓存) |
3.交互操作
输入命令top然后输入以下命令,得以下功能对进程进行排序
| 操作 | 功能 |
|---|---|
| P | 以 CPU 使用率排序(默认排序方式) |
| M | 以内存使用率排序 |
| N | 以 PID(进程 ID)排序 |
| q | 退出 top 界面 |
应用案例
案例 1:监视特定用户, 比如监控 tom 用户
输入top
回车
输入u
回车
输入要监控用户名 (该用户要登录才能看到他的进程信息)
案例 2:终止指定的进程, 比如我们要结束 tom 登录
输入top
回车
输入k
回车
输入要结束的进程 ID 号 (bash那个进程的PID)
回车
输入信号量 9 强制删除
tom掉线
案例 3:指定系统状态更新的时间(每隔 10 秒自动更新),默认是 3 秒
top -d 10
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 7.netstat-监控网络状态
基本语法:
netstat [选项]
选项说明:
-an 按一定顺序排列输出
-p 显示哪个进程在调用
输入netstat -an | more (more 分页展示)
显示:
Proto 协议
Recv-Q 接收信息队列
Send-Q 发送信息队列
Local Address 本地地址 Linux地址
Foreign Address 外部地址
State LISTEN 监听 ESTABLISHED 已建立连接 TIME_WAIT 超时等待
TIME_WAIT 超时等待
--->某个连接断了之后(如用户退出登录),连接不会立刻消失,而是State变为TIME_WAIT
系统认为可能是网络状态不好,过一段时间仍无法连接,则连接消失。
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 36 192.168.200.130:22 192.168.200.1:14498 ESTABLISHED
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
要建立连接双方都要有一个端口,22端口在Linux,14498端口在Windows 如下图:
