进程管理
一、核心概念
- 程序 (Program) vs 进程 (Process) vs 线程 (Thread)
- 程序:静态的、存储在磁盘上的可执行文件。
- 进程:动态的、程序的一次执行实例,拥有独立的资源(内存、数据、寄存器等)。
- 线程:进程内的一个执行流,是 CPU 调度的基本单位,同一进程内的线程共享大部分资源。
- 进程的组成部分:代码段、数据段、堆栈段、PCB(进程控制块)。
- 进程标识符 (PID) 和 父进程标识符 (PPID):每个进程的唯一身份证。
- 进程的生命周期:就绪 (Ready)、运行 (Running)、等待/睡眠 (Waiting/Sleeping)、僵死 (Zombie)、停止 (Stopped)。
二、查看进程:核心命令
ps(Process Status):静态查看进程快照。- 常用组合:
ps aux(BSD格式,信息详细),ps -ef(标准格式),ps -l(显示更友好的格式)。 - 输出字段解析:
USER,PID,%CPU,%MEM,VSZ,RSS,TTY,STAT,START,TIME,COMMAND。
- 常用组合:
pstree:以树状结构显示进程关系,直观查看父进程和子进程。top/htop:动态、交互式地实时查看进程和系统资源占用情况。- 重点学习
top界面内的快捷键(如按P按CPU排序,按M按内存排序,按k杀死进程)。 htop是top的增强版,更友好,建议掌握。
- 重点学习
三、进程控制:启动、终止与优先级
3.1 启动进程
- 前台启动:直接输入命令。
- 后台启动:在命令后加
&符号(如./script.sh &)。
3.2 进程前后台切换
Ctrl + Z:将前台进程挂起(暂停并放入后台)。jobs:查看当前终端后台的进程列表(带编号)。fg %n:将后台进程(编号n)切换到前台继续运行。bg %n:让后台被挂起的进程(编号n)继续在后台运行。
3.3 终止进程
Ctrl + C:优雅地终止前台进程。kill [信号] <PID>:通过发送信号来终止进程。- 常用信号:
SIGTERM (15)(默认,礼貌地请求终止),SIGKILL (9)(强制立即杀死,无法捕获或忽略)。
- 常用信号:
killall <进程名>:通过进程名来终止所有同名进程。pkill <模式>:通过进程名或其他属性模式来终止进程。
3.4 调整进程优先级
- Linux 使用 Nice值 来调整优先级,范围通常为 -20 (最高优先级) 到 19 (最低优先级)。
nice -n <优先级> <命令>:启动时指定优先级。renice <优先级> -p <PID>:调整一个已运行进程的优先级。
四、进程间通信
- 信号 (Signals):
kill命令使用的机制。 - 管道 (Pipe):
|符号,将一个命令的输出作为另一个命令的输入。 - 命名管道 (FIFO):
mkfifo命令创建,可用于无亲缘关系的进程间通信。 - 其他方式简介:信号量、消息队列、共享内存(了解即可)。
五、守护进程
- 概念:一种特殊的后台进程,独立于控制终端,周期性地执行某种任务或等待处理某些发生的事件。
- 常见守护进程:
sshd(SSH),httpd(Web),crond(定时任务)。 - 创建守护进程的步骤(了解)。
六、系统负载监控
uptime:查看系统运行时间、用户数和平均负载。
bash
15:44:16 up 1:06, 1 user, load average: 0.00, 0.04, 0.17
# 系统时间 运行时间 连接用户 平均负载 1分钟 5分钟 10分钟
# 平均负载:数值接近或者超过系统核心数,则表示非常繁忙七、实战与故障排查
- 根据端口找进程:
netstat -tunlp | grep :80或ss -tunlp | grep :80或lsof -i :80。 - 根据资源占用定位问题进程:使用
top发现高CPU/内存占用的PID,再用ps aux | grep <PID>查看详情。 - 处理僵尸进程 (Zombie):找到其父进程并重启父进程。