🔍 一、查看进程

1. ps 命令(静态查看)

  • 功能:显示当前进程快照,支持多种筛选和格式化输出。
  • 常用选项组合
    • ps aux:显示所有用户进程的详细信息(BSD 风格),包括 CPU/内存占用、启动命令等。
    • ps -ef:以完整格式显示进程树(System V 风格),包含父进程 PID(PPID)。
    • ps -eo pid,user,%cpu,%mem --sort=-%mem:按内存占用降序排序,自定义输出列。
  • 示例
    ps aux | grep nginx    # 过滤包含 "nginx" 的进程
    ps -p 1234 -o comm=    # 显示 PID 1234 的进程名(无列名)
    

2. top / htop(动态监控)

  • 功能:实时刷新进程状态和资源占用(CPU、内存等)。
  • 交互命令
    • P:按 CPU 使用率排序,M:按内存使用率排序。
    • k:终止指定 PID 的进程(默认发送 SIGTERM)。
    • r:调整进程优先级(输入 nice 值)。
  • 高级用法
    top -d 5 -o %MEM          # 每 5 秒刷新,按内存排序
    htop -u mysql             # 仅显示 mysql 用户的进程(需安装 `htop`)
    

3. pgrep(快速定位 PID)

  • 功能:根据进程名、用户等属性查找 PID。
  • 常用选项
    • pgrep -l firefox:显示进程名和 PID。
    • pgrep -u root -x sshd:精确匹配 root 用户的 sshd 进程。
  • 示例
    pgrep -f "java -jar app.jar"   # 匹配完整命令行
    

4. pstree(进程树)

  • 功能:以树状结构展示父子进程关系,便于排查依赖或僵尸进程。
  • 常用选项
    • pstree -p:显示 PID。
    • pstree -s 1234:从 PID 1234 向上追溯父进程链。
  • 示例
    pstree -p | grep defunct   # 查找僵尸进程
    

⚔️ 二、终止进程

1. kill(按 PID 终止)

  • 信号类型
    • kill 1234:默认发送 SIGTERM(15),允许进程清理后退出。
    • kill -9 1234:发送 SIGKILL(9),强制立即终止(无清理机会)
  • 步骤
    # 先查 PID,再终止
    pid=$(pgrep -x nginx)
    kill -15 $pid
    

2. pkill / killall(按名称终止)

  • 功能:批量终止同名进程。
  • 示例
    pkill -9 firefox         # 强制终止所有 firefox 进程]
    killall -u testuser      # 终止 testuser 的所有进程(`killall` 需安装)]
    

⚙️ 三、进程控制进阶

1. 后台运行与管理

  • 启动后台进程
    sleep 60 &   # 末尾加 `&` 后台运行,输出作业编号如 [1] 1234
    
  • 管理后台作业
    jobs          # 查看后台作业列表
    fg %1         # 将作业 1 调回前台
    bg %1         # 让暂停的作业 1 在后台继续运行
    

2. 调整优先级

  • nice:启动时设置优先级(-20 最高,19 最低)。
    nice -n 10 ./script.sh   # 以低优先级运行
    
  • renice:修改运行中进程的优先级。
    renice -n 5 -p 1234      # 将 PID 1234 的优先级设为 5