进程与服务管理

最后更新: 2026-01-08 作者: Linux Team
页面目录
目录

进程基础

什么是进程?

进程是运行中的程序实例,是Linux系统资源分配的基本单位。每个进程都有一个唯一的PID(进程ID)。

┌─────────────────────────────────────────────────────────────┐
│                    进程与程序                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   程序 ──→ 静态代码文件,存储在磁盘上                        │
│             例: /bin/bash, /usr/bin/nginx                   │
│                                                             │
│   进程 ──→ 动态运行的实例,内存中执行                        │
│             例: PID 1234, 分配CPU时间、内存                  │
│                                                             │
│   线程 ──→ 进程内的执行单元,共享进程资源                    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

进程类型

类型 说明 特性
前台进程 与终端关联,占用终端 可交互
后台进程 不占用终端,启动时加 & 不可交互
守护进程(Daemon) 系统服务,脱离终端运行 自动启动
僵尸进程(Zombie) 进程已终止但未回收 占用PID
孤儿进程(Orphan) 父进程退出,子进程被init收养 正常运行

进程状态

┌─────────────────────────────────────────────────────────────┐
│                    进程状态转换                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   新建 → 就绪 → 运行 → 阻塞 → 终止                           │
│              ↑       ↓       ↓                              │
│              └──←────┘       ↓                              │
│                            → 僵尸                           │
│                                                             │
│   状态码:                                                   │
│   R - 运行中(Running/Runnable)                            │
│   S - 可中断睡眠(Interruptible Sleep)                      │
│   D - 不可中断睡眠(Uninterruptible Sleep)                  │
│   Z - 僵尸(Zombie)                                        │
│   T - 停止(Stopped/Traced)                                │
│   X - 死亡(Dead)                                          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

进程查看命令

ps - 进程快照

# BSD风格
ps aux                           # 显示所有进程(含其他用户)
ps -ef                           # 标准格式显示
ps -eLf                          # 显示线程
ps -eo pid,ppid,user,%cpu,%mem,cmd  # 自定义列

# Unix风格
ps -p 1234                       # 查看指定PID
ps --ppid 1234                   # 查看指定进程的子进程
ps -U username                   # 查看用户进程
ps -G groupname                  # 查看组进程

# 常用组合
ps aux | grep nginx              # 查找nginx进程
ps -ef | grep "[p]ython"         # 排除grep自身
ps --sort=-%cpu | head           # 按CPU排序
ps --sort=-%mem | head           # 按内存排序

# 树形显示
ps -ef --forest                  # 显示进程树
pstree                           # 树形显示(需安装psmisc)
pstree -p                        # 显示PID
pstree -u username              # 显示用户进程树

top/htop - 动态监控

# top - 实时进程监控
top                              # 启动top
top -d 5                         # 每5秒刷新
top -p 1234                      # 监控指定PID
top -u username                  # 只显示用户进程
top -b -n 10 > top.log           # 批处理模式输出

# top快捷键
h/?          帮助
q            退出
z            彩色显示
x/y          高亮排序列/字段
P            按CPU排序
M            按内存排序
T            按时间排序
k            终止进程
r            重新设置优先级
u            过滤用户
n            设置显示进程数
l            显示/隐藏负载
t/m          显示/隐藏CPU/内存
1            显示所有CPU核心
W            保存配置
# htop - 更友好的监控(需安装)
sudo apt install htop

htop                               # 启动
htop -d 10                        # 10秒刷新
htop -u username                  # 过滤用户
htop -p 1234,5678                # 监控指定PID

# htop快捷键
F1-?      帮助
F2       设置
F3       搜索进程
F4       过滤
F5       树形显示
F6       排序
F7/F8    降低/提高优先级
F9       发送信号
F10      退出

# htop配色方案
htop -t                          # 显示进程树
htop -s MEM                      # 按内存排序启动

其他进程命令

# pgrep - 按名称搜索进程
pgrep nginx                      # 返回PID
pgrep -l nginx                   # 显示名称
pgrep -u root nginx              # root用户的nginx进程
pgrep -f "nginx.*8080"           # 匹配完整命令行

# pidof - 获取进程PID
pidof nginx                      # 精确匹配程序名
pidof -s nginx                   # 只返回一个PID
pidof -x script.sh              # 查找脚本进程

# pkill - 按名终止进程
pkill nginx                      # 终止所有nginx
pkill -u user nginx              # 终止用户的nginx
pkill -9 nginx                   # 强制终止
pkill -f "python.*server"       # 匹配命令行

# killall - 按名终止所有进程
killall nginx
killall -i nginx                 # 交互确认
killall -9 nginx                 # 强制终止
killall -u user nginx            # 终止用户进程
killall --older-than 1h nginx   # 终止1小时前的进程

进程控制

发送信号

# 常用信号
kill -l                          # 列出所有信号

# 信号列表
1) SIGHUP       挂起,重读配置
2) SIGINT       中断(Ctrl+C)
3) SIGQUIT      退出(Ctrl+\)
9) SIGKILL      强制终止
15) SIGTERM     优雅终止(默认)
18) SIGCONT     继续运行
19) SIGSTOP     暂停
20) SIGTSTP     挂起(Ctrl+Z)

# 使用示例
kill 1234                        # 发送TERM信号
kill -9 1234                     # 强制终止
kill -SIGTERM 1234               # 使用名称
kill -s TERM 1234                # 同上
kill -l 15                       # 查看信号15名称

作业控制

# 后台运行
command &                        # 后台运行
nohup command &                  # 忽略挂起信号
nohup command > output.log &     # 输出重定向

# jobs - 查看作业
jobs                              # 列出所有作业
jobs -l                          # 显示PID
jobs -p                          # 只显示PGID
jobs -r                          # 只显示运行的
jobs -s                          # 只显示停止的

# fg/bg - 前后台切换
fg                               # 恢复最近后台作业
fg %1                            # 恢复作业1
fg %nginx                        # 恢复包含nginx的作业
bg                               # 让停止的作业在后台继续
bg %2                            # 后台运行作业2

# Ctrl+Z - 挂起当前作业
Ctrl+Z                           # 挂起当前作业

nohup与screen

# nohup - 持久运行
nohup ./script.sh &                   # 后台运行
nohup ./script.sh > output.log 2>&1 & # 重定向输出
echo "password" | nohup command &      # 提供输入

# screen - 虚拟终端
sudo apt install screen

screen -S mysession              # 创建命名会话
screen -ls                      # 列出所有会话
screen -r mysession             # 恢复会话
Ctrl+A D                       # 分离会话
Ctrl+A N                       # 新窗口
Ctrl+A W                       # 窗口列表
Ctrl+A K                       # 关闭窗口
Ctrl+A [                       # 复制/滚动模式

# tmux - 更强大的终端管理器(推荐)
sudo apt install tmux

tmux new -s mysession           # 创建会话
tmux ls                         # 列出会话
tmux attach -t mysession        # 连接会话
tmux detach                     # 分离

# tmux快捷键(前缀Ctrl+B)
d              分离
c              新窗口
%              左右分屏
"              上下分屏
o              切换面板
x              关闭面板
z              最大化面板
[              复制模式

服务管理

systemd 概述

systemd是现代Linux系统的主流服务管理器。

┌─────────────────────────────────────────────────────────────┐
│                    systemd 架构                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   systemd ──→ systemctl ──→ 服务单元                        │
│                │                                           │
│         ┌──────┴──────┐                                    │
│         ↓             ↓                                    │
│      service        socket                                │
│      timer          path                                  │
│      mount          swap                                  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

systemctl 基础命令

# 启动和停止
sudo systemctl start nginx           # 启动服务
sudo systemctl stop nginx           # 停止服务
sudo systemctl restart nginx        # 重启服务
sudo systemctl reload nginx         # 重载配置

# 查看状态
sudo systemctl status nginx         # 显示详细状态
sudo systemctl is-active nginx     # 检查是否运行
sudo systemctl is-enabled nginx    # 检查是否开机启动
sudo systemctl show nginx           # 显示服务属性

# 开机启动
sudo systemctl enable nginx         # 开机启动
sudo systemctl disable nginx       # 禁用开机启动
sudo systemctl mask nginx          # 屏蔽服务(禁止启动)
sudo systemctl unmask nginx        # 取消屏蔽

# 查看服务列表
systemctl list-units --type=service --all           # 所有服务
systemctl list-units --type=service --state=running # 运行中的
systemctl list-dependencies nginx                   # 依赖关系
systemctl list-unit-files                            # 单元文件

# 查看日志
sudo journalctl -u nginx               # 服务日志
sudo journalctl -u nginx --since today  # 今日日志
sudo journalctl -u nginx -f             # 实时日志
sudo journalctl -xe                    # 系统日志

服务单元文件

# 位置
/etc/systemd/system/       # 系统服务
/usr/lib/systemd/system/    # 软件包服务
~/.config/systemd/user/     # 用户服务

# 示例:nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

init.d 脚本(旧式)

# SysVinit 服务
/etc/init.d/nginx start
/etc/init.d/nginx stop
/etc/init.d/nginx restart
/etc/init.d/nginx status

# update-rc.d(Debian/Ubuntu)
sudo update-rc.d nginx defaults
sudo update-rc.d nginx enable
sudo update-rc.d nginx disable
sudo update-rc.d -f nginx remove

# chkconfig(CentOS/RHEL)
sudo chkconfig nginx on
sudo chkconfig nginx off
sudo chkconfig --list nginx

服务依赖管理

# 查看依赖
systemctl list-dependencies nginx

# 反向依赖
systemctl list-dependencies --reverse nginx

# 重新加载systemd
sudo systemctl daemon-reload

# 重新加载配置
sudo systemctl reload daemon-reload

资源监控

CPU监控

# top
top
# 按P排序查看CPU使用

# mpstat(需安装sysstat)
sudo apt install sysstat
mpstat                         # 每CPU统计
mpstat -P ALL 1 5              # 每1秒,共5次

# iostat
iostat -c                      # 只显示CPU

# lscpu
lscpu                          # CPU详细信息

内存监控

# free
free                            # 基本信息
free -h                         # 人类可读
free -m                         # 以MB为单位
free -s 5                       # 每5秒刷新
watch -n 1 free -h              # 实时监控

# 输出解释
# total    总内存
# used     已使用(含缓存)
# free     完全空闲
# available 实际可用(含缓存回收)

磁盘I/O监控

# iostat
iostat                          # 基本统计
iostat -x                       # 详细统计
iostat -d 1 5                   # 每秒,共5次
iostat -p sda                   # 单个设备

# iotop
sudo apt install iotop
sudo iotop                       # 实时I/O
sudo iotop -o                    # 只显示活动进程
sudo iotop -b -n 5              # 批处理模式

# ioping
sudo ioping /dev/sda1           # 测试磁盘延迟

网络监控

# iftop
sudo apt install iftop
sudo iftop -i eth0               # 监控接口

# nethogs
sudo apt install nethogs
sudo nethogs eth0               # 按进程网络使用

# ss - Socket统计
ss -tulnp                       # 所有监听端口
ss -tn                         # TCP连接
ss -un                         # UDP连接
ss -p                          # 显示进程
ss state established           # 已建立连接

综合监控工具

# glances(推荐)
sudo apt install glances
glances                          # 启动
glances -t 2                     # 2秒刷新
glances -c @remote_ip           # 远程监控

# nmon
sudo apt install nmon
nmon                            # 交互式监控

# dstat
sudo apt install dstat
dstat                          # 综合统计
dstat -cdngy                    # CPU、磁盘、网络、内存、负载

进程优先级

nice值

# nice值范围:-20(高优先级)到 19(低优先级)
# 默认nice值:0

# 启动时设置优先级
nice -n 10 command              # 低优先级启动
nice -n -10 command             # 高优先级启动(需root)
nice -n 19 ./backup.sh         # 后台备份设为低优先级

# 查看进程nice值
ps -eo pid,ni,cmd

renice - 调整优先级

# 调整运行中的进程
sudo renice -n 10 -p 1234       # 设置PID 1234为nice=10
sudo renice -n 10 -u username    # 调整用户所有进程
sudo renice -n 10 -g groupname   # 调整组进程

# top中调整
# 启动top后按r,输入PID和新的PR值

real-time priority

# 查看调度策略
ps -eo pid,policy,cmd

# SCHEDULER类型
# NORMAL/SCHED_OTHER: 普通调度
# FIFO: 实时FIFO
# RR: 实时轮询

# 设置实时优先级
sudo chrt -f 50 -p 1234         # FIFO,优先级50
sudo chrt -r 50 -p 1234         # RR,优先级50

课后练习

实践任务
  1. 使用 pstophtop 查看系统进程
  2. 启动nginx服务,练习 systemctl start/stop/status
  3. 创建后台任务,使用 jobsfg/bg 进行控制
  4. 使用 screen 创建持久会话,运行长时间任务
  5. 分析日志找出占用CPU/内存最高的进程
  6. 编写脚本监控服务状态,服务停止时自动重启

下一篇预告:我们将学习软件包管理,掌握apt、yum/dnf的使用方法。