学习目标

  • 理解本节涉及的核心主题:Linux 进程管理、htop - 更友好的进程监控工具、pgrep - 根据名称查找进程、进程管理与控制。
  • 掌握重点命令或工具:htoppgrepkillpkillkillallnohup
  • 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
  • 能够识别本节相关的常见风险、易错点或排查思路。

学习重点

  • 主题范围:Linux 进程管理、htop - 更友好的进程监控工具、pgrep - 根据名称查找进程、进程管理与控制、kill - 终止进程、pkill - 按名称终止进程
  • 重点命令:htoppgrepkillpkillkillallnohup
  • 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
  • 复习方式:先理解场景,再动手练习,最后对照结果检查

Linux 进程管理

htop - 更友好的进程监控工具

htoptop 的增强版,提供更直观的界面和更多的功能,适用于需要更高效和友好的进程监控的场景。

安装与基本用法

安装 htop

sudo apt-get install htop      # Debian/Ubuntu
sudo yum install htop          # CentOS/RHEL
sudo pacman -S htop            # Arch Linux

启动 htop

htop
界面优势与功能

htop 提供彩色显示、图形化的 CPU 和内存使用情况、更直观的进程树、支持鼠标操作等优势。

界面示例:

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
 1500 alice      20   0 35600  4200   840 R  0.0  0.1   0:00.00 ps aux
 1501 alice      20   0 10320   840   560 S  0.0  0.0   0:00.00 grep ssh
常用快捷键与操作
  • F1:帮助。
  • F2:设置。
  • F3:搜索。
  • F4:筛选。
  • F5:树状视图。
  • F6:选择排序列。
  • F9:杀死进程。
  • F10:退出 htop

示例操作:

  1. 搜索进程:
    F3 键,输入 nginx,按回车,htop 将高亮显示包含 nginx 的进程。
  2. 杀死进程:
    使用箭头键选中目标进程,按 F9,选择信号(如 SIGTERM),按回车终止进程。
  3. 切换到树状视图:
    F5 键,htop 将以树状结构显示进程,便于查看父子进程关系。

pgrep - 根据名称查找进程

pgrep 是一个用于根据名称或其他属性查找进程的命令,返回匹配进程的 PID。它简化了进程查找和管理的过程。

基本用法

命令语法:

pgrep [选项] 模式

示例:

查找所有名称包含 ssh 的进程:

pgrep ssh

输出示例:

1320
2001

表示有两个进程名称包含 ssh,其 PID 分别为 13202001

常用选项(如 -u, -l, -f

1. -u:指定用户

查找指定用户的进程:

pgrep -u alice bash

输出示例:

1450
1600

2. -l:显示进程名称

显示进程的 PID 及名称:

pgrep -l ssh

输出示例:

1320 sshd
2001 ssh-agent

3. -f:匹配完整命令行

匹配完整的命令行,而不仅仅是进程名称:

pgrep -f "nginx: worker process"

输出示例:

2002
2003
应用场景
  • 批量终止进程:结合 kill 命令批量终止特定名称的进程。
  • 监控特定进程:定期检查某个服务是否在运行。
  • 脚本自动化:在脚本中自动查找和管理进程。

示例:批量终止所有 nginx 进程

kill $(pgrep nginx)

注意事项:

  • 使用 pgrep 时确保模式足够精确,避免匹配不必要的进程。
  • 对于关键系统进程,谨慎终止,以免影响系统稳定性。

进程管理与控制

进程管理与控制包括终止、暂停、恢复和后台执行进程等操作,确保系统资源的有效利用和任务的顺利完成。

kill - 终止进程

kill 命令用于发送信号给进程,通常用于终止不响应的进程。

基本用法(按 PID)

命令语法:

kill [信号] PID

默认信号:

如果未指定信号,默认发送 SIGTERM(15),请求进程正常终止。

示例:终止 PID 为 1500 的进程

kill 1500

输出:

无输出,命令执行成功表示信号已发送。

验证进程是否终止:

ps -p 1500

如果进程已终止,输出将为空。

信号的使用(如 SIGTERM, SIGKILL

信号用于控制进程的行为,常见信号包括:

  • SIGTERM(15):请求进程终止,进程可以捕获并进行清理操作。
  • SIGKILL(9):强制终止进程,无法被捕获或忽略。
  • SIGSTOP:暂停进程执行。
  • SIGCONT:继续执行被暂停的进程。

发送不同信号的示例:

  1. 发送 SIGTERM

    kill -SIGTERM 1500
    

    或使用信号编号:

    kill -15 1500
    
  2. 发送 SIGKILL

    kill -SIGKILL 1500
    

    或使用信号编号:

    kill -9 1500
    

示例操作:

假设进程 1500 是一个挂起的应用程序,无响应。

  1. 尝试正常终止:
    kill 1500
    
  2. 如果进程未响应,强制终止:
    kill -9 1500
    
常见实例与注意事项

实例 1:终止一个僵尸进程

僵尸进程无法被 kill 命令终止,因为它已经完成执行,只等待其父进程回收资源。解决方法是终止父进程,让系统自动回收僵尸进程。

ps aux | grep 'Z'

kill -HUP 1320

实例 2:暂停和恢复进程

虽然 kill 主要用于发送终止信号,但也可以发送暂停(SIGSTOP)和恢复(SIGCONT)信号。

kill -SIGSTOP 1500

kill -SIGCONT 1500

注意事项:

  • 权限:只有进程所有者或超级用户才能发送信号。
  • 谨慎使用 SIGKILL:强制终止进程可能导致数据丢失或系统不稳定,应尽量先尝试 SIGTERM
  • 避免终止关键系统进程:终止如 initsystemd 等关键进程可能导致系统崩溃。

pkill - 按名称终止进程

pkill 是一个更方便的工具,用于根据进程名称或其他属性发送信号,简化进程管理。

基本用法

命令语法:

pkill [选项] 模式

示例:终止所有名称包含 nginx 的进程

pkill nginx

说明:

默认发送 SIGTERM 信号,请求进程正常终止。

常用选项(如 -u, -f, -SIG

1. -u:指定用户

终止指定用户的进程:

pkill -u alice bash

2. -f:匹配完整命令行

匹配完整的命令行内容:

pkill -f "python script.py"

3. -SIG:指定信号

发送特定信号:

pkill -SIGKILL nginx

或使用信号编号:

pkill -9 nginx
应用场景与示例

场景 1:终止所有 python 进程

pkill python

场景 2:终止特定用户的进程

终止用户 bob 的所有 ssh 进程:

pkill -u bob ssh

场景 3:发送 SIGSTOP 信号暂停进程

pkill -SIGSTOP nginx

注意事项:

  • 模式匹配的准确性:确保模式足够精确,以避免终止不相关的进程。
  • 权限:与 kill 类似,只有进程所有者或超级用户才能发送信号。
  • 谨慎使用高权限信号:如 SIGKILL,避免对系统稳定性造成影响。

killall - 终止所有匹配进程

killall 命令用于终止所有名称匹配指定模式的进程,适用于同时管理多个相同类型的进程。

基本用法

命令语法:

killall [选项] 进程名

示例:终止所有 nginx 进程

killall nginx

说明:

默认发送 SIGTERM 信号,请求进程正常终止。

常用选项与参数

1. -u:指定用户

终止指定用户的进程:

killall -u alice bash

2. -s:指定信号

发送特定信号:

killall -s SIGKILL nginx

或使用信号编号:

killall -9 nginx

3. -I:忽略大小写

忽略进程名称的大小写:

killall -I Nginx

4. -w:等待进程终止

等待所有进程终止后再返回:

killall -w nginx
应用场景与注意事项

场景 1:重启 Web 服务器

killall -9 nginx
service nginx start

场景 2:终止特定用户的进程

killall -u bob firefox

注意事项:

  • 避免误杀进程:确保进程名准确,避免终止系统关键进程。
  • 权限控制:只有进程所有者或超级用户才能终止进程。
  • 信号选择:优先使用 SIGTERM,必要时使用 SIGKILL

暂停、恢复和后台执行进程

在命令行中运行的前台进程可以通过快捷键和命令进行暂停、恢复和后台执行,提升任务管理的灵活性。

使用 Ctrl+Z 暂停进程

当一个进程在前台运行时,可以通过按下 Ctrl+Z 将其暂停,进程进入后台的停止状态。

示例:

gedit

操作:

按下 Ctrl+Z,输出如下:

[1]+  Stopped                 gedit
使用 bg 将进程放到后台

将已暂停的进程恢复执行,并在后台继续运行。

命令:

bg

示例操作:

bg

输出示例:

[1]+ gedit &
使用 fg 将进程恢复到前台

将后台运行的进程恢复到前台,使其继续与用户交互。

命令:

fg

示例操作:

fg

输出示例:

gedit
使用 jobs 查看后台任务

jobs 命令用于列出当前终端的所有后台任务及其状态。

命令:

jobs

输出示例:

[1]+  Running                 gedit &
[2]-  Stopped                 vim
实例操作

示例 1:暂停并后台运行进程

  1. 启动一个长时间运行的进程,如 gedit

    gedit
    
  2. Ctrl+Z 暂停进程:

    [1]+  Stopped                 gedit
    
  3. 将进程放到后台继续运行:

    bg
    
    [1]+ gedit &
    

示例 2:查看并恢复后台任务

  1. 查看后台任务:

    jobs
    
    [1]+  Running                 gedit &
    [2]-  Stopped                 vim
    
  2. vim 恢复到前台:

    fg %2
    
    vim
    

注意事项:

  • 终端关闭影响:后台任务在终端关闭后可能被终止,除非使用 nohupscreen 等工具。
  • 资源占用:后台进程仍然占用系统资源,应根据需要合理管理。

nohup - 让进程在退出后继续运行

nohup(no hang up 的缩写)用于启动一个进程,使其在用户退出终端或关闭会话后仍然继续运行。常用于运行长时间执行的任务。

基本用法

命令语法:

nohup command [args] &

示例:启动一个长时间运行的脚本 backup.sh,使其在用户注销后继续运行

nohup ./backup.sh &

操作结果:

  • 生成 nohup.out 文件,记录进程的标准输出和标准错误。
  • 进程在后台运行,独立于终端会话。
常见应用场景(如长时间运行的任务)
  • 数据备份:启动备份脚本,确保备份任务在用户注销后继续运行。
  • 服务器进程:启动需要持续运行的服务器进程,如 Web 服务器、数据库服务器。
  • 批处理任务:执行需要较长时间完成的批处理任务,如数据分析、文件转换。

示例操作:

  1. 启动 backup.sh 脚本,并将输出重定向到 backup.log
    nohup ./backup.sh > backup.log 2>&1 &
    
  2. 验证进程是否在运行
    ps aux | grep backup.sh
    

注意事项:

  • 输出重定向:默认情况下,nohup 将输出重定向到 nohup.out,可以通过 > 手动指定输出文件。
  • 后台运行:使用 & 将进程放到后台,避免占用当前终端。
  • 进程监控:结合 ps, top, htop 等工具监控 nohup 进程的状态。
实例与注意事项

实例 1:启动并监控一个 Python 脚本

nohup python3 long_task.py > long_task.log 2>&1 &

解释:

  • nohup:确保进程在终端关闭后继续运行。
  • python3 long_task.py:执行 Python 脚本。
  • > long_task.log:将标准输出重定向到 long_task.log
  • 2>&1:将标准错误重定向到标准输出。
  • &:将进程放到后台运行。

实例 2:终止 nohup 启动的进程

  1. 查找进程 PID
    ps aux | grep long_task.py
    
  2. 终止进程
    kill PID
    

注意事项:

  • 保持输出可用:定期检查输出日志文件,确保任务按预期运行。
  • 权限:确保有足够的权限启动和管理 nohup 进程。
  • 资源管理:监控 nohup 进程的资源使用,避免占用过多系统资源。

本节总结

  • 本节主要围绕 Linux 进程管理、htop - 更友好的进程监控工具、pgrep - 根据名称查找进程、进程管理与控制、kill - 终止进程 展开。
  • 需要重点掌握的命令或工具包括:htoppgrepkillpkillkillallnohup
  • 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
  • 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。

复习建议

  • 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
  • 按原文示例至少手敲一遍典型命令,并观察输出变化。
  • 对高风险操作先确认路径、权限和目标对象,再执行实际命令。
  • 可优先复习这些高频命令:htoppgrepkillpkillkillallnohup