Skip to content

进程管理

进程概述

进程状态

状态说明
R (Running)运行中或就绪
S (Sleeping)可中断睡眠
D (Disk Sleep)不可中断睡眠
T (Stopped)停止状态
Z (Zombie)僵尸进程
I (Idle)空闲状态

进程优先级

  • 优先级范围:-20 到 19
  • 数值越小优先级越高
  • 默认优先级:0

ps - 查看进程

基本用法

bash
ps                                 # 当前终端进程
ps -e                              # 所有进程
ps -A                              # 所有进程
ps a                               # 所有终端进程
ps aux                             # 详细信息(BSD风格)
ps -ef                             # 详细信息(标准风格)
ps -eF                             # 更详细信息

常用选项

bash
ps -u username                     # 指定用户的进程
ps -p 1234                         # 指定 PID
ps -C nginx                        # 指定命令名
ps --forest                        # 树形显示
ps -o pid,ppid,cmd,%mem,%cpu       # 自定义输出列
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu    # 按CPU排序
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem    # 按内存排序

输出列说明

说明
PID进程 ID
PPID父进程 ID
USER用户
%CPUCPU 使用率
%MEM内存使用率
VSZ虚拟内存大小
RSS物理内存大小
STAT进程状态
START启动时间
TIMECPU 时间
COMMAND命令

查找进程

bash
ps aux | grep nginx
pgrep nginx                        # 查找进程 PID
pgrep -l nginx                     # 显示进程名
pgrep -u root nginx                # 指定用户
pgrep -P 1234                      # 查找子进程
pidof nginx                        # 查找进程 PID

top - 动态监控

基本用法

bash
top                                # 动态显示进程
top -d 5                           # 5秒刷新
top -n 10                          # 刷新10次后退出
top -p 1234,5678                   # 监控指定进程
top -u username                    # 指定用户
top -b                             # 批处理模式
top -b -n 1 > output.txt           # 输出到文件

交互命令

命令功能
h帮助
q退出
k终止进程
r调整优先级
P按 CPU 排序
M按内存排序
T按时间排序
N按 PID 排序
c显示完整命令
f选择显示字段
1显示各 CPU
u指定用户
z彩色显示

top 输出说明

top - 12:00:00 up 10 days,  2:00,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 100 total,   1 running,  99 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si
MiB Mem :   8000.0 total,    500.0 free,   2000.0 used,   5500.0 buff/cache
MiB Swap:   2000.0 total,   1900.0 free,    100.0 used.   5000.0 avail Mem
  • load average: 1/5/15分钟平均负载
  • us: 用户空间 CPU
  • sy: 内核空间 CPU
  • id: 空闲 CPU
  • wa: 等待 I/O

htop - 增强版监控

bash
htop                               # 启动 htop
htop -p 1234                       # 监控指定进程
htop -u username                   # 指定用户
htop -t                            # 树形显示
htop -s PERCENT_CPU                # 按 CPU 排序
htop -s PERCENT_MEM                # 按内存排序

htop 交互命令

命令功能
F1帮助
F2设置
F3搜索
F4过滤
F5树形视图
F6排序
F7降低优先级
F8提高优先级
F9终止进程
F10退出

kill - 终止进程

信号列表

信号编号说明
SIGHUP1挂起/重新加载配置
SIGINT2中断 (Ctrl+C)
SIGQUIT3退出
SIGKILL9强制终止
SIGTERM15正常终止(默认)
SIGCONT18继续
SIGSTOP19暂停

基本用法

bash
kill 1234                          # 发送 SIGTERM
kill -15 1234                      # 发送 SIGTERM
kill -TERM 1234                    # 发送 SIGTERM
kill -9 1234                       # 强制终止
kill -KILL 1234                    # 强制终止
kill -HUP 1234                     # 重新加载配置
kill -l                            # 列出所有信号

killall - 按名称终止

bash
killall nginx                      # 终止所有 nginx 进程
killall -9 nginx                   # 强制终止
killall -u username                # 终止用户所有进程
killall -i nginx                   # 交互式确认
killall -w nginx                   # 等待进程结束

pkill - 按模式终止

bash
pkill nginx                        # 终止匹配进程
pkill -9 nginx                     # 强制终止
pkill -u username                  # 终止用户进程
pkill -f "python script.py"        # 匹配完整命令
pkill -t pts/0                     # 终止终端进程
pkill -P 1234                      # 终止子进程

进程控制

后台运行

bash
command &                          # 后台运行
nohup command &                    # 忽略挂断信号
nohup command > output.log 2>&1 &  # 重定向输出
setsid command                     # 新会话运行
disown %1                          # 从作业列表移除

作业控制

bash
jobs                               # 查看作业
jobs -l                            # 详细信息
Ctrl + Z                           # 暂停当前进程
bg %1                              # 后台继续
fg %1                              # 前台继续
wait %1                            # 等待作业完成
wait $!                            # 等待最后一个后台进程

nice - 启动时设置优先级

bash
nice -n 10 command                 # 优先级 10
nice -n -5 command                 # 优先级 -5(需要 root)
nice --10 command                  # 优先级 -10

renice - 修改运行中进程优先级

bash
renice -n 5 -p 1234                # 修改进程优先级
renice -n 5 -u username            # 修改用户所有进程
renice -n 5 -g groupname           # 修改组所有进程

pstree - 进程树

bash
pstree                             # 显示进程树
pstree -p                          # 显示 PID
pstree -u                          # 显示用户
pstree -h                          # 高亮当前进程
pstree -H 1234                     # 高亮指定进程
pstree -s                          # 显示父进程
pstree -a                          # 显示完整命令
pstree -n                          # 按 PID 排序
pstree 1234                        # 指定进程的子树

进程资源限制

ulimit - 资源限制

bash
ulimit -a                          # 查看所有限制
ulimit -n                          # 打开文件数
ulimit -u                          # 用户进程数
ulimit -s                          # 栈大小
ulimit -v                          # 虚拟内存
ulimit -m                          # 物理内存
ulimit -c                          # 核心转储大小
ulimit -f                          # 文件大小

ulimit -n 65535                    # 设置打开文件数
ulimit -c unlimited                # 允许核心转储

/etc/security/limits.conf

username soft nofile 65535
username hard nofile 65535
username soft nproc 4096
username hard nproc 4096
* soft core unlimited
* hard core unlimited

进程监控工具

vmstat - 虚拟内存统计

bash
vmstat                             # 内存统计
vmstat 1                           # 每秒刷新
vmstat 1 10                        # 刷新10次
vmstat -s                          # 统计信息
vmstat -d                          # 磁盘统计

iostat - I/O 统计

bash
iostat                             # I/O 统计
iostat 1                           # 每秒刷新
iostat -x                          # 扩展信息
iostat -c                          # CPU 统计
iostat -d sda                      # 指定设备

mpstat - CPU 统计

bash
mpstat                             # CPU 统计
mpstat 1                           # 每秒刷新
mpstat -P ALL                      # 所有 CPU
mpstat -P 0                        # 指定 CPU

pidstat - 进程统计

bash
pidstat                            # 进程统计
pidstat 1                          # 每秒刷新
pidstat -p 1234                    # 指定进程
pidstat -d                         # 磁盘 I/O
pidstat -r                         # 内存使用
pidstat -u                         # CPU 使用
pidstat -w                         # 上下文切换

strace - 系统调用跟踪

bash
strace command                     # 跟踪命令
strace -p 1234                     # 跟踪运行中进程
strace -c command                  # 统计系统调用
strace -e trace=open,read command  # 跟踪指定调用
strace -f command                  # 跟踪子进程
strace -o output.txt command       # 输出到文件
strace -T command                  # 显示调用时间

ltrace - 库调用跟踪

bash
ltrace command                     # 跟踪库调用
ltrace -p 1234                     # 跟踪运行中进程
ltrace -c command                  # 统计库调用
ltrace -e malloc,free command      # 跟踪指定函数

守护进程

systemctl - systemd 服务管理

bash
systemctl start nginx              # 启动服务
systemctl stop nginx               # 停止服务
systemctl restart nginx            # 重启服务
systemctl reload nginx             # 重新加载配置
systemctl status nginx             # 查看状态
systemctl enable nginx             # 开机自启
systemctl disable nginx            # 禁用自启
systemctl is-enabled nginx         # 查看是否自启
systemctl is-active nginx          # 查看是否运行
systemctl list-units --type=service    # 列出所有服务
systemctl list-unit-files --type=service   # 列出服务文件
systemctl daemon-reload            # 重新加载配置文件

journalctl - 日志查看

bash
journalctl                         # 查看所有日志
journalctl -u nginx                # 查看服务日志
journalctl -f                      # 实时跟踪
journalctl -n 100                  # 最近100条
journalctl --since today           # 今天的日志
journalctl --since "2023-12-25"    # 指定日期
journalctl -p err                  # 错误级别日志
journalctl -b                      # 本次启动日志
journalctl -k                      # 内核日志

实用示例

查找并终止进程

bash
ps aux | grep nginx | grep -v grep | awk '{print $2}' | xargs kill
pkill -f "python script.py"
kill $(pgrep -f "node app.js")

监控进程资源

bash
top -b -n 1 | head -20
ps aux --sort=-%cpu | head -10
ps aux --sort=-%mem | head -10

查找僵尸进程

bash
ps aux | awk '$8 ~ /Z/ {print}'
ps -eo pid,ppid,stat,cmd | grep Z

下一步学习