进程管理
发表于:2025-08-06 | 分类: Linux

一、进程

1.进程的概念

程序是人类按照机器能够读懂的语言所写的代码(组成:数据+逻辑)
进程是程序在操作系统中的一次执行过程,是操作系统进行资源分配和调度的一个基本单位。它是一个程序在一个数据集合上运行过程的描述,当一个程序被加载到内存中运行时,便是一个进程。
进程是计算机通过人为调用开启程序之后,把硬盘当中的代码复制到内存中,然后让CPU通过代码调用它需要处理的数据,再进行相应地处理,并且把处理过的的数据保存到硬盘的一个过程。
进程对CPU的占用决定了系统速度的快慢,占用时间越长,CPU计算的时间越差,系统越慢。

2.进程和pid

在Linux系统中,PID(Process ID)是进程标识符(Process Identifier) 的缩写。它是一个唯一且非负的整数,用于在操作系统中唯一标识一个正在运行的进程。每个进程(包括程序、服务、后台任务等)启动时都会被分配一个PID,系统通过PID管理和跟踪进程的生命周期。

1
2
3
4
5
6
7
8
9
[root@farrah 桌面]# ps   #输第一次ps命令,会产生pid为2882的进程
PID TTY TIME CMD
2483 pts/0 00:00:00 bash
2882 pts/0 00:00:00 ps

[root@farrah 桌面]# ps #第二次ps 2896
PID TTY TIME CMD
2483 pts/0 00:00:00 bash
2896 pts/0 00:00:00 ps

3.进程的状态

在Linux内核里,进程有时候也叫做任务。

运行状态 说明
R(running,ready) 运行状态,并不意味着进程一定在运行中,它表明进程要么是在运行中,要么在运行队列里
S(sleeping) 睡眠状态(阻塞状态),进程在等待某些事件(如输入、输出、信号等)完成,这里的睡眠有时候也叫做中断睡眠
T(stopped) 停止状态,可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
D(Disk sleep) 磁盘休眠状态,常是由于等待某些资源(如磁盘 I/O)而进入此状态。此时进程无法被唤醒,直到等待的资源可用,有时候也叫不可中断睡眠状态(uninterruptible sleep)。
X(dead) 死亡状态,这个状态只是一个返回状态,一般不会在任务列表里看到这个状态。
Z(Zombies) 僵尸状态,当进程退出并且父进程没有读取到子进程退出的返回代码时,就会产生僵死(尸)进程(使用wait()或waitpid()等函数来获取最终状态)

二、进程管理

1. 常用选项

命令 功能
-e 显示所有进程
-a 显示 所有终端进程(除会话领导者)
-x 显示 不关联终端的进程(如守护进程)
-f 显示信息完整的格式
-H 显示进程的层级结构
-o 显示指定参数
-u <用户> 显示指定用户的进程(如 -u root )
–sort= 显示以指定参数的排序结果,显示以指定参数的排序结果,参数前加 - 表示降序
1
ps -e

image-20250806110834763

1
ps -a   #不包含bash\shell,不包含守护进程(sshd,nginx等)

image-20250806112130304

1
ps -u root   #显示root用户的进程

image-20250806112343342

2.常用组合

1.显示所有进程的详细信息

说明:BSD 风格,显示所有进程的详细信息。

1
ps aux

image-20250806135702612

2.系统进程查看

显示所有进程的完整信息。

1
ps -ef
3.自定义输出格式
1
2
#使用 -o 选项指定显示的字段:
ps -eo pid,user,%cpu,%mem,cmd --sort=-%cpu | head

3.实际应用场景

1. 查找进程的 PID

1
ps aux | grep nginx # 查找 nginx 进程的 PID

2. 监控资源占用

1
ps -eo pid,%cpu,%mem,cmd --sort=-%mem | head # 查看最耗内存的进程

3. 杀死进程前的确认

1
ps -p 5678 -o pid,cmd # 确认 PID=5678 的进程是否为目标进程

4. 查看进程树

1
ps -ef --forest # 显示父子进程关系

4.动态查看进程top

top是Linux中最常用的实时系统监控工具,能够动态显示 进程资源占用 和 系统整体状态。它提供了交互式操作,方便用户快速分析性能瓶颈

1.基础语法
1
2
top # 启动 top
q 或 Ctrl+C # 退出 top

top 界面分为 摘要区(系统概览)和 进程列表区(实时进程信息)

上半部分(系统概览)

  1. 系统时间/负载
  2. 任务统计(176 total)
  3. CPU使用分布(99.7% idle)
  4. 内存使用(3.8GB total)
  5. Swap使用(4.0GB free)

下半部分(进程列表)

字段 说明
VIRT 虚拟内存
RES 常驻内存
SHR 共享内存
NI Nice值(-20-19)

image-20250806154604584

image-20250806154615552

2.交互式命令(运行中按快捷键)
命令 功能
k 终止进程(输入 PID,再输入信号,默认 SIGTERM)
r 调整进程优先级(输入 PID,再输入 Nice 值)。
P 按 CPU 使用率排序。
M 按内存使用率排序
T 按运行时间排序
N 按PID排序
Z 切换 颜色高亮显示
c 显示完整命令路径
l 展开显示每个 CPU 核心的负载
h 查看帮助信息
空格 立即刷新界面

5.信号控制

常用信号

信号 说明
1 SIGHUP (重载配置)/重刷新一个进程,主要用户服务的刷新
2 中断
9 SIGKILL (强制终止)/杀掉一个进程,但不杀掉其子进程(centos7)
15 SIGTERM (正常终止)/杀掉进程及其子进程
18 SIGCONT (恢复执行)
19 SIGSTOP (暂停)/暂停一个进程
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
#启动httpd服务
[root@farrah 桌面]# systemctl start httpd

#查看httpd服务的进程 5658为主进程,其他的都是子进程
[root@farrah 桌面]# ps -ef | grep httpd
root 5658 1 1 16:17 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 5667 5658 0 16:17 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 5668 5658 7 16:17 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 5669 5658 6 16:17 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 5670 5658 10 16:17 ? 00:00:01 /usr/sbin/httpd -DFOREGROUND
root 5912 2483 0 16:17 pts/0 00:00:00 grep --color=auto httpd

#使用-1 刷新主进程
[root@farrah 桌面]# kill -1 5658
#查看进程,主进程不变,子进程号全部变了
[root@farrah 桌面]# ps -ef | grep httpd
root 5658 1 0 16:17 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 5941 5658 0 16:18 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 5942 5658 0 16:18 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 5943 5658 0 16:18 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 5944 5658 0 16:18 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 6167 2483 0 16:18 pts/0 00:00:00 grep --color=auto httpd

#-15后终止httpd服务
[root@farrah 桌面]# kill -15 5658
#查看进程,httpd进程不存在了
[root@farrah 桌面]# ps -ef | grep httpd
root 6278 2483 0 16:24 pts/0 00:00:00 grep --color=auto httpd

6.进程优先级

Nice值范围

-20(最高)到 19(最低)

查看优先级:

1
ps axo pid,command,nice --sort=-nice

7.作业控制

linux可以在一个终端中管理多个任务进程(这些进程称之为job)。 有些进程会占用终端运行很久或是一直占用终端,那么想要运行第二进程 就无法操作了, 所以进程可以放到后台执行,这样就不影响在同一个终端运行第二个进程了

前后台管理

查看当前终端运行的job

1
2
[root@farrah 桌面]# jobs -l  #此时为空
[root@farrah 桌面]# sleep 20 #此命令占用终端20秒,也就是会占用终端20秒 ctrl+c可退出

如图,等待20秒后执行命令

image-20250806170607903

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# &为后台符号 让sleep在终端后台继续运行
[root@farrah 桌面]# sleep 20&
[2] 7560
[1] 已完成 sleep 20
[root@farrah 桌面]# ps -ef | grep sleep
root 7560 2483 0 17:28 pts/0 00:00:00 sleep 20
root 7574 1105 0 17:28 ? 00:00:00 sleep 60
root 7576 2483 0 17:28 pts/0 00:00:00 grep --color=auto sleep

#查看
[root@farrah 桌面]# jobs -l
[1]+ 7597 运行中 sleep 20 &
#将后台转到终端前台运行 %1 1代表第一个job
[root@farrah 桌面]# fg %1

#按ctrl+z可以将占用前台的进程转到后台暂停执行
[1]+ Stopped
[root@shanxun ~]# jobs -l
[1]+ 12615 Stopped sleep 100000 & #确认为stop状态
[root@shanxun ~]# bg %1 # bg命令将后台stopped状态的进程转为后台running运行状态
[1]+ sleep 100000 &
[root@shanxun ~]# jobs -l
[1]+ 12615 Running sleep 100000 & #确认为运行状态

区别

kill 1 :终止PID为1的进程(系统进程)

kill %1 :终止作业号为1的后台进程

8.虚拟文件系统 proc

关键文件

1
2
3
4
5
/proc/cpuinfo # CPU信息

/proc/meminfo # 内存信息

/proc/cmdline # 内核启动参数

查看命令

1
2
cat /proc/cpuinfo # 查看CPU详情
less /proc/meminfo # 查看内存使用
上一篇:
计划任务
下一篇:
Linux重定向