Skip to content

进程管理

一、核心概念

  • 程序 (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 杀死进程)。
    • htoptop 的增强版,更友好,建议掌握。

三、进程控制:启动、终止与优先级

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 :80ss -tunlp | grep :80lsof -i :80
  • 根据资源占用定位问题进程:使用 top 发现高CPU/内存占用的PID,再用 ps aux | grep <PID> 查看详情。
  • 处理僵尸进程 (Zombie):找到其父进程并重启父进程。