# 07.Linux-进程管理

# 1.基本介绍

(1)在 LINUX 中,每个执行的程序都称为一个进程。每一个进程都分配一个 ID 号(pid,进程号)。程序执行之后加载到内存中成为进程。程序是静态的,进程是动态的。

(2)每个进程都可能以两种方式存在:

  • 前台与后台

    • 前台进程:是用户目前的屏幕上可以进行操作的。

    • 后台进程:是实际在操作的,但屏幕上无法看到,通常使用后台方式执行。

(3)一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束。


# 2.PS命令

基本介绍:ps命令是用来查看目前系统中,有哪些进程正在执行,以及它们执行的状况。可以不加任何参数。

1.ps -aux

语法:
 ps [选项] Process Status
 选项:
 -a 显示当前终端的所有进程信息
 -u 以用户的格式显示进程信息
 -x 显示后台程序运行的参数

一般三个选项一起用:
 ps -aux
显示出如下内容:
1
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 指令显示内容如下: 
1
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
1
2
3
4
5
6
7

# 3.kill和killall

1.介绍

若是某个进程执行一半需要停止时,或是已经消耗了很大的系统资源时,此时可以考虑停止该进程。使用 kill 命令来完成此项任务。

2.基本语法

kill [选项] 进程号    (功能描述:通过进程号杀死/终止进程)
killall 进程名称        (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
                     使用killall,会将该进程的所有子进程也都删除/终止。
常用选项:
    -9   表示强制终止进程
1
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  对应的进程号
1
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
1
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
1
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 生效.
1
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] 服务名
1
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=端口/协议
1
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
1
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来仅仅监控某个进程的状态
1
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
1
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
1
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 如下图:

最近更新: 9/19/2026, 1:27:08 PM
编程NOTE   |