⚙️ 进程与服务
大家好,我是长安!这一章来讲讲 Linux 的进程和服务管理,这是运维必备技能。
🎯 本章目标
跟着长安读完这一章,你将学会:
- 什么是进程,如何查看和管理
- 前台和后台运行程序
- 系统服务的管理(systemctl)
- 定时任务的设置
🔄 什么是进程?
进程(Process)就是运行中的程序。
比如:
- 你打开一个浏览器 → 创建了一个进程
- 你运行一个命令 → 创建了一个进程
- 一个程序可以有多个进程
每个进程都有一个唯一的 PID(Process ID,进程号)。
👀 查看进程
ps - 进程快照
# 查看当前终端的进程
ps
# 查看所有进程(常用)
ps aux
# 查看所有进程(另一种格式)
ps -ef
# 查看指定进程
ps aux | grep nginx
# 显示进程树
ps -ef --forest
ps aux 输出解释:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 168936 11904 ? Ss 10:00 0:01 /sbin/init
xiaoming 1234 0.5 2.3 987654 45678 pts/0 S 10:05 0:30 /usr/bin/vim
│ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ └── 命令
│ │ │ │ │ │ │ │ │ └── 运行时间
│ │ │ │ │ │ │ │ └── 启动时间
│ │ │ │ │ │ │ └── 状态
│ │ │ │ │ │ └── 终端
│ │ │ │ │ └── 物理内存
│ │ │ │ └── 虚拟内存
│ │ │ └── 内存占用 %
│ │ └── CPU 占用 %
│ └── 进程 ID
└── 用户
进程状态(STAT)含义:
| 状态 | 含义 |
|---|---|
R | 运行中(Running) |
S | 休眠中(Sleeping) |
D | 不可中断休眠 |
T | 已停止(Stopped) |
Z | 僵尸进程(Zombie) |
< | 高优先级 |
N | 低优先级 |
s | 会话领导者 |
+ | 前台进程 |
top - 实时监控
# 启动 top
top
top 界面说明:
top - 10:30:00 up 2 days, 3:15, 2 users, load average: 0.08, 0.15, 0.10
Tasks: 256 total, 1 running, 255 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.3 us, 1.0 sy, 0.0 ni, 96.5 id, 0.1 wa, 0.0 hi, 0.1 si
MiB Mem : 15896.4 total, 8234.2 free, 4562.1 used, 3100.1 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 10834.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 xiaoming 20 0 987654 45678 12345 S 5.0 2.3 0:30.25 vim
top 快捷键:
| 按键 | 功能 |
|---|---|
q | 退出 |
P | 按 CPU 排序 |
M | 按内存排序 |
k | 杀死进程(输入 PID) |
1 | 显示每个 CPU |
h | 帮助 |
htop - 更好看的 top
# 安装
sudo apt install htop -y
# 运行
htop
htop 有彩色界面,支持鼠标,更易用!
pgrep - 按名称查找进程
# 查找 nginx 进程的 PID
pgrep nginx
# 显示完整命令
pgrep -a nginx
# 按用户查找
pgrep -u xiaoming
🎯 管理进程
kill - 杀死进程
# 优雅终止进程(发送 SIGTERM)
kill PID
kill 1234
# 强制杀死进程(发送 SIGKILL)
kill -9 PID
kill -KILL PID
# 按名称杀死进程
killall nginx
pkill nginx
# 杀死用户的所有进程
killall -u username
常用信号:
| 信号 | 数字 | 含义 |
|---|---|---|
SIGTERM | 15 | 优雅终止(默认) |
SIGKILL | 9 | 强制杀死 |
SIGHUP | 1 | 重新加载配置 |
SIGSTOP | 19 | 暂停进程 |
SIGCONT | 18 | 继续进程 |
nice/renice - 调整优先级
# 以低优先级运行命令(nice 值越高,优先级越低)
nice -n 10 ./my_script.sh
# 调整运行中进程的优先级
renice 10 -p 1234
🎭 前台和后台
前台运行(默认)
# 前台运行,会占用终端
sleep 100
后台运行
# 方法 1:命令末尾加 &
sleep 100 &
# 方法 2:把前台任务放到后台
# 先按 Ctrl+Z 暂停,再用 bg 放后台
Ctrl+Z
bg
# 查看后台任务
jobs
# 把后台任务调到前台
fg
fg %1 # 指定任务号
nohup - 忽略挂断信号
# 即使终端关闭,程序也继续运行
nohup ./my_script.sh &
# 输出默认保存到 nohup.out
# 也可以重定向
nohup ./my_script.sh > output.log 2>&1 &
screen/tmux - 终端复用
# 安装 screen
sudo apt install screen -y
# 创建新会话
screen -S my_session
# 在会话中运行程序...
# 分离会话(程序继续运行)
Ctrl+A, D
# 查看所有会话
screen -ls
# 重新连接会话
screen -r my_session
🛠️ 系统服务管理
现代 Linux 使用 systemd 管理服务。
systemctl 常用命令
# 启动服务
sudo systemctl start nginx
# 停止服务
sudo systemctl stop nginx
# 重启服务
sudo systemctl restart nginx
# 重新加载配置(不中断服务)
sudo systemctl reload nginx
# 查看服务状态
sudo systemctl status nginx
# 设置开机自启
sudo systemctl enable nginx
# 取消开机自启
sudo systemctl disable nginx
# 查看是否开机自启
sudo systemctl is-enabled nginx
# 查看所有服务
sudo systemctl list-units --type=service
# 查看运行中的服务
sudo systemctl list-units --type=service --state=running
查看服务状态输出
$ sudo systemctl status nginx
● nginx.service - A high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
Active: active (running) since Mon 2024-01-01 10:00:00 CST
Main PID: 1234 (nginx)
Tasks: 2 (limit: 4915)
Memory: 5.3M
CPU: 23ms
CGroup: /system.slice/nginx.service
├─1234 "nginx: master process"
└─1235 "nginx: worker process"
loaded- 服务配置已加载enabled- 开机自启已启用active (running)- 服务正在运行
查看服务日志
# 查看服务日志
sudo journalctl -u nginx
# 实时查看
sudo journalctl -u nginx -f
# 查看最近的日志
sudo journalctl -u nginx --since "1 hour ago"
⏰ 定时任务
crontab - 定时执行
# 编辑当前用户的定时任务
crontab -e
# 查看当前用户的定时任务
crontab -l
# 删除所有定时任务
crontab -r
crontab 格式
┌───────────── 分钟 (0 - 59)
│ ┌───────────── 小时 (0 - 23)
│ │ ┌───────────── 日期 (1 - 31)
│ │ │ ┌───────────── 月份 (1 - 12)
│ │ │ │ ┌───────────── 星期 (0 - 7) (0和7都是周日)
│ │ │ │ │
* * * * * command
示例
# 每分钟执行
* * * * * /path/to/script.sh
# 每小时执行(整点)
0 * * * * /path/to/script.sh
# 每天凌晨 3 点执行
0 3 * * * /path/to/script.sh
# 每周一凌晨 3 点执行
0 3 * * 1 /path/to/script.sh
# 每月 1 号凌晨 3 点执行
0 3 1 * * /path/to/script.sh
# 每 5 分钟执行
*/5 * * * * /path/to/script.sh
# 每天 8 点到 18 点,每小时执行
0 8-18 * * * /path/to/script.sh
# 工作日(周一到周五)上午 9 点执行
0 9 * * 1-5 /path/to/script.sh
定时任务小技巧
# 任务输出保存到日志
0 3 * * * /path/to/script.sh >> /var/log/myscript.log 2>&1
# 不要任何输出
0 3 * * * /path/to/script.sh > /dev/null 2>&1
# 使用环境变量
PATH=/usr/local/bin:/usr/bin:/bin
0 3 * * * /path/to/script.sh
at - 一次性定时任务
# 在指定时间执行(只执行一次)
at 10:00
> /path/to/script.sh
> Ctrl+D
# 查看待执行的任务
atq
# 删除任务
atrm 任务号
📊 系统资源监控
内存监控
# 查看内存使用
free -h
# 持续监控
watch -n 1 free -h
磁盘监控
# 磁盘使用情况
df -h
# 目录大小
du -sh /var/log
# 磁盘 I/O
iostat
网络监控
# 网络连接
netstat -tuln
ss -tuln
# 网络流量
iftop # 需要安装
# 网络统计
netstat -s
📝 本章小结
常用命令速查
| 操作 | 命令 |
|---|---|
| 查看进程 | ps aux |
| 实时监控 | top / htop |
| 杀死进程 | kill PID / kill -9 PID |
| 后台运行 | command & |
| 不挂断运行 | nohup command & |
| 启动服务 | sudo systemctl start xxx |
| 停止服务 | sudo systemctl stop xxx |
| 服务状态 | sudo systemctl status xxx |
| 编辑定时任务 | crontab -e |
服务管理速记
sudo systemctl start/stop/restart/status 服务名
sudo systemctl enable/disable 服务名
cron 时间速记
* * * * * 每分钟
0 * * * * 每小时
0 0 * * * 每天
0 0 * * 0 每周日
0 0 1 * * 每月1号
🚀 下一步
进程和服务掌握了,接下来跟着长安学习 网络基础!
—— 编程指南社区 · 长安
