Linux任务管理器 - top命令介绍

Linux任务管理器 - top命令介绍

前言

在Linux系统管理中,top命令是最常用的实时系统监控工具之一。它被称为Linux的"任务管理器",能够动态显示系统资源使用情况和进程信息。本文将详细介绍top命令(基于procps-ng 3.3.17版本)的常用功能和实用技巧。

一、top命令基础

1.1 启动top

在终端中直接输入以下命令即可启动top:

top

默认情况下,top会每3秒刷新一次,显示系统摘要信息和进程列表。

1.2 界面布局解读

top的界面主要分为两部分:

系统摘要区(顶部)

  • 系统时间、运行时长、登录用户数
  • 平均负载(1分钟、5分钟、15分钟)
  • 任务统计(总数、运行、休眠、停止、僵尸进程)
  • CPU使用率(用户态、系统态、空闲等)
  • 内存使用情况(物理内存和交换分区)

进程列表区(底部)

  • 显示各个进程的详细信息,包括PID、用户、优先级、CPU占用、内存占用等

1.3 实际界面示例

下面是一个典型的top界面输出示例:

top - 14:23:45 up 5 days, 3:21, 2 users, load average: 0.52, 0.58, 0.61
Tasks: 178 total,   1 running, 177 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.2 us,  2.1 sy,  0.0 ni, 91.5 id,  1.0 wa,  0.0 hi,  0.2 si,  0.0 st
MiB Mem :   7821.4 total,    892.3 free,   4156.8 used,   2772.3 buff/cache
MiB Swap:   2048.0 total,   1876.5 free,    171.5 used.   3241.2 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 2341 www-data  20   0  682456  89324  12456 S   3.6   1.1  45:23.17 nginx
 1523 mysql     20   0 1845632 456789  23456 S   2.3   5.7 128:45.89 mysqld
 3721 appuser   20   0  523648  78912   8765 S   1.7   1.0  23:12.45 node
 1234 root      20   0  234567  45678   6789 S   0.7   0.6  12:34.56 python3
  891 redis     20   0  156432  34567   4567 S   0.3   0.4   8:23.12 redis-server

关键指标说明:

第一行:

  • 14:23:45 - 当前时间
  • up 5 days, 3:21 - 系统运行了5天3小时21分钟
  • 2 users - 当前2个用户登录
  • load average: 0.52, 0.58, 0.61 - 1分钟、5分钟、15分钟的平均负载

第二行(Tasks):

  • 178 total - 总共178个进程
  • 1 running - 1个正在运行
  • 177 sleeping - 177个休眠状态
  • 0 zombie - 0个僵尸进程(非常重要的指标)

第三行(CPU):

  • 5.2 us (user) - 用户空间进程占用5.2%
  • 2.1 sy (system) - 内核空间占用2.1%
  • 0.0 ni (nice) - 调整过优先级的进程占用0%
  • 91.5 id (idle) - 空闲CPU 91.5%
  • 1.0 wa (wait) - 等待I/O完成占用1.0% (这个值很重要!)
  • 0.0 hi (hardware interrupts) - 硬件中断占用0%
  • 0.2 si (software interrupts) - 软件中断占用0.2%
  • 0.0 st (steal time) - 虚拟机被宿主机偷走的CPU时间0%

重点解释wa (I/O wait):

  • wa值表示CPU等待I/O操作完成的时间百分比
  • 如果wa持续很高(比如>20%),说明系统I/O性能可能是瓶颈
  • 常见原因:磁盘读写慢、数据库查询频繁、大文件传输等

第四行(内存):

  • 7821.4 total - 总内存7.8GB
  • 892.3 free - 空闲内存892MB
  • 4156.8 used - 已使用4.1GB
  • 2772.3 buff/cache - 缓冲/缓存2.7GB

第五行(交换分区):

  • 2048.0 total - 总交换空间2GB
  • 1876.5 free - 空闲1.8GB
  • 171.5 used - 已使用171MB

二、常用交互命令

2.1 显示调整命令

颜色和显示效果

  • Z - 配置颜色方案,让界面更美观
  • B - 切换粗体显示
  • z - 切换彩色/单色显示
  • b - 切换粗体/反色显示(需要先启用x或y)

系统信息显示切换

  • l - 切换显示/隐藏负载平均值和启动时间
  • t - 切换显示/隐藏任务和CPU信息(可按多次循环不同显示模式)
  • m - 切换显示/隐藏内存信息(可按多次循环不同显示模式)
  • 1 - 切换显示单个CPU或所有CPU核心的详细信息
  • I - 切换Irix模式(影响CPU使用率计算方式)

内存单位调整

  • E - 改变系统摘要区的内存显示单位(KiB、MiB、GiB等)
  • e - 改变进程列表区的内存显示单位

2.2 进程筛选和排序

排序功能

  • P - 按CPU使用率排序(默认)
  • M - 按内存使用率排序
  • T - 按运行时间排序
  • < / > - 向左/右移动排序列
  • R - 反转排序顺序
  • x - 高亮显示排序字段
  • y - 高亮显示正在运行的任务

排序功能实例演示:

按P键 - 按CPU排序(默认)

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 2341 www-data  20   0  682456  89324  12456 S  15.3   1.1  45:23.17 nginx
 3721 appuser   20   0  523648  78912   8765 S   8.7   1.0  23:12.45 node
 1523 mysql     20   0 1845632 456789  23456 S   5.2   5.7 128:45.89 mysqld
 1234 root      20   0  234567  45678   6789 S   2.3   0.6  12:34.56 python3
  891 redis     20   0  156432  34567   4567 S   0.7   0.4   8:23.12 redis-server

可以看到CPU使用率从高到低排列,nginx进程占用15.3%最高。

按M键 - 按内存排序

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1523 mysql     20   0 1845632 456789  23456 S   5.2   5.7 128:45.89 mysqld
 2341 www-data  20   0  682456  89324  12456 S  15.3   1.1  45:23.17 nginx
 3721 appuser   20   0  523648  78912   8765 S   8.7   1.0  23:12.45 node
 1234 root      20   0  234567  45678   6789 S   2.3   0.6  12:34.56 python3
  891 redis     20   0  156432  34567   4567 S   0.7   0.4   8:23.12 redis-server

现在按内存占用排序,mysqld进程占用5.7%内存(约456MB)最多。

按T键 - 按运行时间排序

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1523 mysql     20   0 1845632 456789  23456 S   5.2   5.7 128:45.89 mysqld
 2341 www-data  20   0  682456  89324  12456 S  15.3   1.1  45:23.17 nginx
 3721 appuser   20   0  523648  78912   8765 S   8.7   1.0  23:12.45 node
 1234 root      20   0  234567  45678   6789 S   2.3   0.6  12:34.56 python3
  891 redis     20   0  156432  34567   4567 S   0.7   0.4   8:23.12 redis-server

按累计CPU时间排序,mysqld运行时间最长(128小时45分钟)。

过滤功能

  • u / U - 按有效用户/任何用户过滤进程
  • o / O - 设置其他过滤条件
  • Ctrl+O - 显示当前所有过滤器
  • i - 切换是否显示空闲进程
  • n# - 设置显示的最大任务数

搜索功能

  • L - 定位字符串(向前搜索)
  • & - 重复上次搜索

2.3 字段管理

字段显示配置

  • fF - 进入字段管理界面,可以添加/删除/排序显示字段
  • X - 增加固定宽度字段的宽度

在字段管理界面中,你可以:

  • 使用方向键选择字段
  • 按空格键切换字段的显示/隐藏
  • d或空格切换字段选中状态
  • s设置排序字段

2.4 进程管理

操作进程

  • k - 终止进程(会提示输入PID和信号编号)
  • r - 重新设置进程优先级(renice)

使用示例:

  1. k,输入要终止的进程PID
  2. 输入信号编号(默认15-SIGTERM,9-SIGKILL强制终止)
  3. 按回车执行

2.5 视图切换

多窗口和视图

  • V - 切换树形视图(进程树)
  • v - 在树形视图中显示/隐藏子进程
  • c - 切换显示命令名称/完整命令行
  • S - 切换累计时间模式
  • H - 切换显示线程

实例:按c键切换命令显示

简短命令名(默认):

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 2341 www-data  20   0  682456  89324  12456 S  15.3   1.1  45:23.17 nginx
 3721 appuser   20   0  523648  78912   8765 S   8.7   1.0  23:12.45 node

按c后显示完整命令行:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 2341 www-data  20   0  682456  89324  12456 S  15.3   1.1  45:23.17 nginx: worker process
 3721 appuser   20   0  523648  78912   8765 S   8.7   1.0  23:12.45 node /app/server.js

这样可以看到完整的启动参数,帮助识别具体是哪个应用程序。

2.6 刷新和配置

更新控制

  • ds - 设置刷新间隔(秒)
  • 空格 - 立即刷新

配置保存

  • W - 将当前配置写入配置文件(~/.config/procps/toprc)
  • Y - 检查其他输出
  • ! - 合并CPU显示

退出

  • qEsc - 退出top

三、实用技巧

3.1 快速查找占用资源最多的进程

查找CPU占用最高的进程:

# 启动后已按CPU排序,或按P键
top

查找内存占用最高的进程:

# 启动后按M键
top
# 或启动时直接指定
top -o %MEM

3.2 监控特定用户的进程

方法一:进入top后按u,输入用户名 方法二:启动时指定用户

top -u username

3.3 批处理模式

将top输出到文件或通过管道处理:

# 运行10次迭代后退出
top -b -n 10 > top_output.txt

# 只显示特定用户,执行5次
top -b -n 5 -u nginx > nginx_processes.txt

3.4 自定义显示字段

f进入字段管理,常用字段包括:

  • PID - 进程ID
  • USER - 进程所有者
  • %CPU - CPU使用率
  • %MEM - 内存使用率
  • TIME+ - 累计CPU时间
  • COMMAND - 命令名称

可以根据需要添加:

  • nMaj - 主要页面错误
  • nMin - 次要页面错误
  • SWAP - 交换分区使用量
  • CODE - 代码段大小

3.5 多核CPU监控

1键可以展开显示每个CPU核心的使用情况,这在诊断CPU亲和性问题时特别有用。

实例:按1键查看多核CPU详情

按1之前(汇总显示):

%Cpu(s):  5.2 us,  2.1 sy,  0.0 ni, 91.5 id,  1.0 wa,  0.0 hi,  0.2 si,  0.0 st

按1之后(每个核心单独显示):

%Cpu0  :  2.3 us,  1.0 sy,  0.0 ni, 96.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  : 18.5 us,  5.2 sy,  0.0 ni, 75.3 id,  1.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  3.1 us,  1.5 sy,  0.0 ni, 95.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  1.8 us,  0.9 sy,  0.0 ni, 97.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

从这个例子可以看出:

  • Cpu1核心负载较高(18.5% us + 5.2% sy = 23.7%)
  • 其他核心负载较低
  • 这可能表示某个单线程程序占用了Cpu1核心
  • 或者程序的线程亲和性设置导致负载不均衡

3.6 进程树视图

V键可以切换到树形视图,清晰显示进程之间的父子关系。这对于理解进程启动层次非常有帮助。

实例:按V键查看进程树

普通视图:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1234 root      20   0  234567  45678   6789 S   2.3   0.6  12:34.56 nginx
 2341 www-data  20   0  682456  89324  12456 S  15.3   1.1  45:23.17 nginx
 2342 www-data  20   0  682456  88124  12456 S  12.1   1.1  42:18.23 nginx

按V后的树形视图:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1234 root      20   0  234567  45678   6789 S   2.3   0.6  12:34.56  ├─ nginx
 2341 www-data  20   0  682456  89324  12456 S  15.3   1.1  45:23.17  │  └─ nginx
 2342 www-data  20   0  682456  88124  12456 S  12.1   1.1  42:18.23  │  └─ nginx

可以清楚地看到PID 1234是主进程(root用户),2341和2342是它的工作进程(www-data用户)。

3.7 高亮显示技巧

  • x高亮排序列,让你快速看到哪个指标在排序
  • y高亮正在运行的进程,区分运行和睡眠状态
  • b可以使用粗体或反色显示高亮内容

四、高级技巧

4.1 组合过滤条件

oO可以设置复杂的过滤条件,例如:

# 过滤CPU使用率大于10%的进程
%CPU>10

# 过滤内存使用大于100M的进程
RES>102400

4.2 理解CPU使用率

在多核系统中,默认情况下CPU使用率是所有核心的平均值。如果你想看到单个进程在单核上的使用情况:

  • I切换Irix模式
  • Irix模式关闭时,单个进程可以显示超过100%的CPU使用率(多核并行)

4.3 快速定位问题进程

  1. xy组合使用,高亮排序字段和运行中的任务
  2. M切换到内存排序
  3. c显示完整命令行,了解进程详情
  4. 使用L搜索特定进程名称

4.4 安全模式

在生产环境中,可以使用安全模式启动top,防止误操作:

top -s

安全模式下,无法使用k(kill)和r(renice)命令。

五、常见问题排查

5.1 系统负载高

  1. 启动top,按1查看各核心CPU使用情况
  2. P排序找出CPU占用最高的进程
  3. c查看完整命令行
  4. 检查wa(IO等待)是否过高,可能是磁盘瓶颈

实例场景:高CPU使用率问题

top - 14:23:45 up 5 days, 3:21, 2 users, load average: 3.52, 2.98, 2.61
Tasks: 178 total,   3 running, 175 sleeping,   0 stopped,   0 zombie
%Cpu(s): 78.2 us, 15.1 sy,  0.0 ni,  5.5 id,  0.8 wa,  0.0 hi,  0.4 si,  0.0 st

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 5621 appuser   20   0  1.2g   456m   23m  R  85.3   5.8  234:12.34 python3
 2341 www-data  20   0  682m    89m   12m  S  12.3   1.1   45:23.17 nginx

分析:

  • load average 3.52 很高(假设是4核CPU,正常应<4.0)
  • CPU空闲率只有5.5%,系统几乎满载
  • python3进程占用85.3% CPU,是主要问题
  • wa值0.8%很低,说明不是I/O瓶颈,而是CPU计算密集

处理建议:

  • c查看python3完整命令,确认是哪个脚本
  • 检查该进程是否正常,或是否有死循环
  • 考虑优化代码或增加CPU资源

5.2 内存不足

  1. M按内存排序
  2. 查看%MEM列找出内存占用最多的进程
  3. 观察SWAP使用情况,如果频繁交换会导致性能下降
  4. 使用e切换内存单位,更直观地查看使用量

实例场景:内存不足导致系统卡顿

top - 15:45:12 up 5 days, 4:43, 2 users, load average: 1.52, 1.68, 1.73
Tasks: 182 total,   1 running, 181 sleeping,   0 stopped,   0 zombie
%Cpu(s):  8.2 us,  3.1 sy,  0.0 ni, 45.5 id, 42.8 wa,  0.0 hi,  0.4 si,  0.0 st
MiB Mem :   7821.4 total,     89.2 free,   7456.8 used,    275.4 buff/cache
MiB Swap:   2048.0 total,    423.5 free,   1624.5 used.     52.3 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1523 mysql     20   0  3.2g   2.8g   34m  S   5.2  36.7 328:45.89 mysqld
 3856 appuser   20   0  1.8g   1.2g   45m  S   3.1  15.7  89:23.45 java
 2341 www-data  20   0  682m   456m   12m  S   2.3   5.8  45:23.17 nginx

分析:

  • 物理内存几乎用完(只剩89MB)
  • wa值42.8%非常高! 说明系统在等待I/O(很可能是swap交换)
  • swap已使用1.6GB(79%),系统在频繁交换内存到磁盘
  • mysqld占用2.8GB内存(36.7%),java占用1.2GB
  • avail Mem只有52MB,系统已经很紧张

处理建议:

  • 考虑增加物理内存
  • 优化mysqld配置,减少内存占用
  • 检查java应用是否内存泄漏
  • 临时方案:重启占用大的服务释放内存

5.3 僵尸进程

  1. 查看顶部的"zombie"计数
  2. c显示完整命令
  3. 记录僵尸进程的PPID(父进程ID)
  4. 通常需要终止或重启父进程来清理僵尸进程

实例场景:发现僵尸进程

top - 16:23:45 up 5 days, 5:21, 2 users, load average: 0.52, 0.58, 0.61
Tasks: 178 total,   1 running, 172 sleeping,   0 stopped,   5 zombie
%Cpu(s):  5.2 us,  2.1 sy,  0.0 ni, 91.5 id,  1.0 wa,  0.0 hi,  0.2 si,  0.0 st

注意到"5 zombie" - 有5个僵尸进程!

f键进入字段管理,添加PPID字段,然后查看:

  PID  PPID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 8234  7891 appuser   20   0       0      0      0 Z   0.0   0.0   0:00.00 <defunct>
 8235  7891 appuser   20   0       0      0      0 Z   0.0   0.0   0:00.00 <defunct>
 8236  7891 appuser   20   0       0      0      0 Z   0.0   0.0   0:00.00 <defunct>
 7891  1234 appuser   20   0  456m    78m    8m  S   0.3   1.0  12:34.56 python3

分析:

  • 有多个进程显示为<defunct>(僵尸进程)
  • 状态列显示Z(Zombie)
  • PPID都是7891,说明父进程是PID 7891的python3程序
  • 僵尸进程本身不占用资源,但说明父进程没有正确处理子进程退出

处理建议:

  • 检查PID 7891的python3程序代码
  • 确保程序正确使用wait()或waitpid()回收子进程
  • 临时方案:重启父进程(PID 7891)会自动清理僵尸进程
  • 命令:kill 7891systemctl restart your-service

六、与其他工具结合使用

虽然top功能强大,但有时需要配合其他工具:

# 使用htop(如果已安装)- 更友好的交互界面
htop

# 使用atop - 提供历史数据记录
atop

# 快速查看进程树
pstree

# 详细的进程信息
ps aux | grep process_name

# 实时监控特定进程
watch -n 1 'ps aux | grep nginx'

七、总结

top命令是Linux系统管理员必须掌握的工具。通过本文介绍的各种交互命令和技巧,你可以:

  • 实时监控系统资源使用情况
  • 快速定位性能瓶颈
  • 灵活筛选和排序进程信息
  • 直接管理进程(终止、调整优先级)
  • 自定义显示内容以满足特定需求

建议在实际工作中多加练习,熟练掌握常用的快捷键组合。记住按h?随时可以查看帮助信息。保存你的个性化配置(按W),让top更加符合你的使用习惯。

无论是日常系统维护还是紧急故障排查,熟练使用top命令都能让你事半功倍,快速解决问题。


提示: 现代Linux发行版还提供了htopglances等更加直观的监控工具,建议根据实际需求选择合适的工具。但是作为系统自带的基础工具,top的重要性依然不可替代。

Read more

心智难民

心智难民

心智,按照牛津词典的定义,是获取和运用知识的能力。 互联网是一场技术革命,给每个人提供了机会。社会是由阶层组成的,每一场技术革命都促使了不同阶层的重新洗牌,或者说阶层分化。网络世界的阶层分化是什么样的呢?大概可以分为两个大的阶层:一类是接受高质量信息的精英阶层,另外一类是消费网络上的垃圾信息、接受劣质信息的乌合之众。 当然,这里说的“免费”是打引号的。因为它不仅不免费,而且一点也不便宜。 人们喜欢免费的东西。但是世界上除了阳光和空气,没什么是真正免费的东西,只是支付的方式不一样——有的直接用钱付,有的间接用钱付;有些用生活质量付,有些用人生的潜力和机会付。 You must pay for everything in this world, one way or another. Nothing is free. 你终究会以不同的方式付费,天下没有免费的午餐。 如果一个人只接受网上“免费”的信息,就像是只吃劣质食品一样,结果就是精神世界的劣质化。因为接受信息质量的差异,

By 王圆圆
Crazy World

Crazy World

by Jeff Daniels 译文 我看见一个年轻女孩笑了, 因为他刚说的话。 我看着他坠入她那双美丽的眼睛里, 脸红的像玫瑰。 我看见一位老人在走路, 妻子陪在他身旁。 我看着他俯身握住她的手, 天啊,我竟然哭了。 这疯狂的世界越来越疯狂, 我有什么资格评判呢? 但值得庆幸的是, 在这个充满仇恨的世界里, 还有人在用心相爱着。 我看见狗摇着尾巴, 看见孩子在奔跑。 我也曾在无数个日落里, 对着夕阳唱着歌。 我看见有人为别人扶着门, 看见陌生人握手寒暄。 我看见她和那个曾经错过的旧情人拥吻, 时间比计划中的更长了一些。 这个疯狂的世界继续疯狂着, 但我能说什么? 好在这个充满恨的世界里, 还有人在用心相爱着。 我看见祈祷被回应, 看见了六月里的新娘。 我骄傲地说,我当时见到了银河, 对着月光下的人们闪烁。 我看见送出的一打玫瑰, 见过她满心的欢喜藏不住, 我见过的已经足够, 让我明白我所知道的, 也坚信我依然相信的。 这疯狂的世界越来越疯狂, 我能说什么? 但值得庆幸的是, 在这个充满仇恨的世界里, 还有人相爱着。 原文 I’ve seen a

By 王圆圆
人是能被改变的吗?

人是能被改变的吗?

想改变别人基本上是在浪费时间。这个话题听起来简单,但仔细想想,我们生活中有太多时候都在做这种徒劳的事。 生活中的人大概可以分成三类: 喜欢的人 - 这些人即使有缺点你也能接受。你们相处舒服,他们做什么你都能理解,就算偶尔看不惯,也不会想着要去改造他们。 无所谓的人 - 占了我们生活中的大多数。同事、路人、网上的陌生人,他们怎么生活、怎么思考,其实跟你一点关系都没有。 讨厌的人 - 那些让你感到不舒服的人。可能是价值观完全相反,可能是行为方式你无法忍受。 既然人际关系本来就是这样,为什么还要费劲去改变谁呢?尤其是那些无所谓的人和讨厌的人,你花时间去说服他们、纠正他们,最后累的是自己。有这个功夫,不如多看两本书,学点新东西,改变一下自己。 美国人教小孩一个词:Walk Away。意思就是遇到麻烦的人、不讲理的人,转身走就完了,不用纠缠。 这听起来好像是逃避,但其实是一种很成熟的处理方式。你不是害怕对方,而是知道跟这种人浪费时间没有意义。 有个作家Charles Portis说过一句话挺有意思的:"

By 王圆圆
留守的代价

留守的代价

我有一个90后的朋友,她的故事让我久久无法平静。 她13岁那年,初中还没读完就辍学了,跟着同乡去了南方打工。六年后,在家人的安排下,她嫁给了邻村一个老实人家的儿子。没有恋爱,没有了解,只有两个家庭觉得"差不多,能过"的判断。 婚后他们一起在宁波工作,陆续有了两个女儿。按理说,一家四口,日子虽苦但也算完整。但我们那个地方,重男轻女的观念像一只看不见的手,推着她生下了第三个孩子——终于是个儿子。 三个孩子陆续到了上学的年龄,他们却一直在外打工。孩子成了留守儿童,跟着爷爷奶奶在老家,一年见父母一两次。视频通话里,孩子越来越沉默,成绩越来越差,老师反映性格也出现了问题。 她做了一个决定:回家照顾孩子。 他继续在外地送快递。从此,这个家庭被一分为二——一边是她独自面对三个问题儿童的混乱和辛苦,一边是他在城市里每天十几个小时的奔波劳累。 本来就没什么感情基础的两个人,在这种分离中,最后那点维系也消磨殆尽了。 最近两年,他给家里的生活费越来越少。后来她才知道,他在外面有了别人,赚的钱不多,都花在了新欢身上。

By 王圆圆