Linux进程管理

进程基本概念

进程 vs 线程

  • 进程: 独立的内存空间,独立的系统资源
  • 线程: 共享进程资源,轻量级执行单元
  • 联系: 线程是进程内的执行单元,一个进程可包含多个线程

进程状态

# 查看进程状态
ps aux

进程状态码

R (Running)     - 运行状态
S (Sleeping)    - 可中断睡眠状态
D (Disk Sleep)  - 不可中断睡眠状态  
Z (Zombie)      - 僵尸进程
T (Stopped)     - 停止状态

进程查看命令

ps命令详解

# 基本格式
ps [选项]
 
# 常用组合
ps aux              # 查看所有进程详细信息
ps -ef              # 标准格式显示所有进程
ps -ejH             # 显示进程树结构
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu  # 自定义输出

ps输出字段说明

USER    - 进程所有者
PID     - 进程ID
PPID    - 父进程ID
%CPU    - CPU使用率
%MEM    - 内存使用率
VSZ     - 虚拟内存大小
RSS     - 物理内存大小
TTY     - 终端类型
STAT    - 进程状态
START   - 启动时间
TIME    - 累计CPU时间
COMMAND - 命令名称

top命令 - 动态监控

top                 # 交互式进程监控

top界面说明

第一行: 系统时间、运行时间、登录用户数、系统负载
第二行: 进程总数、运行状态分布
第三行: CPU使用率 (us用户, sy系统, ni优先级, id空闲, wa等待IO)
第四行: 内存使用情况
第五行: 交换空间使用情况
下方: 进程详细列表

top交互命令

P       - 按CPU使用率排序
M       - 按内存使用率排序  
T       - 按累计时间排序
k       - 杀死进程
r       - 调整进程优先级
q       - 退出

htop增强版

htop                # 彩色界面,支持鼠标操作

进程控制

前台与后台进程

# 后台运行程序
command &           # 在后台运行
nohup command &     # 忽略挂起信号,长期运行
 
# 查看后台作业
jobs                # 查看当前shell的后台作业
jobs -l             # 显示进程ID
 
# 作业控制
fg %n               # 将后台作业调到前台
bg %n               # 将停止的作业放到后台运行
Ctrl+Z              # 暂停当前前台进程

进程终止

# 发送信号
kill [信号] PID     # 向进程发送信号
kill -l             # 列出所有信号
 
# 常用信号
SIGTERM (15)        # 温和终止,允许进程清理资源
SIGKILL (9)         # 强制终止,进程无法捕获或忽略
SIGINT (2)          # 中断信号,等同于Ctrl+C
SIGSTOP (19)        # 停止进程,等同于Ctrl+Z
 
# 按名称杀死进程
killall process_name
pkill pattern       # 根据模式匹配杀死进程

进程优先级

nice值和优先级

# 查看优先级
ps -eo pid,ni,pri,cmd
 
# nice值范围: -20(最高优先级) 到 +19(最低优先级)
# 普通用户只能设置0-19,root用户可以设置-20-19

调整优先级

# 启动时设置nice值
nice -n 10 command  # 以nice值10启动程序
 
# 修改运行中进程的nice值
renice +5 -p PID    # 增加nice值(降低优先级)
renice -5 -p PID    # 减少nice值(提高优先级)

系统负载分析

负载概念

# 查看系统负载
uptime
cat /proc/loadavg

负载值含义

  • 三个数字分别代表1分钟、5分钟、15分钟的平均负载
  • 负载值 = 正在运行进程数 + 等待运行进程数 + 不可中断睡眠进程数
  • 理想负载: 小于CPU核心数

CPU使用率分析

# 查看CPU信息
cat /proc/cpuinfo | grep "processor" | wc -l  # CPU核心数
 
# 监控CPU使用率
sar -u 1 10        # 每1秒采样,共10次
iostat -c 1 10     # CPU统计信息

内存管理

内存查看

# 查看内存使用
free -h             # 人类可读格式
cat /proc/meminfo   # 详细内存信息
 
# 进程内存使用
pmap PID            # 查看进程内存映射
smem                # 更准确的内存使用统计

内存类型

VIRT    - 虚拟内存总量
RES     - 常驻内存(物理内存)
SHR     - 共享内存
%MEM    - 物理内存使用率

僵尸进程处理

僵尸进程成因

  • 子进程结束,父进程未调用wait()回收
  • 父进程异常终止,init进程接管失败

检测和处理

# 查找僵尸进程
ps aux | grep -w Z
 
# 找到父进程
ps -eo pid,ppid,stat | grep Z
 
# 解决方法:杀死父进程或重启服务

性能监控工具

综合监控工具

vmstat 1 10         # 虚拟内存统计
dstat               # 多功能系统资源监控
nmon                # AIX/Linux性能分析工具

进程追踪

strace -p PID       # 跟踪系统调用
ltrace -p PID       # 跟踪库函数调用
lsof -p PID         # 查看进程打开的文件

💡 性能调优建议:

  • 定期监控CPU和内存使用率
  • 及时处理僵尸进程
  • 合理设置进程优先级
  • 使用nohup管理长期运行任务

🔗 相关笔记: 02.03_系统管理 02.05_存储与文件系统 11.01_性能优化