学习目标
- 理解本节涉及的核心主题:Linux 进程管理、
htop- 更友好的进程监控工具、pgrep- 根据名称查找进程、进程管理与控制。 - 掌握重点命令或工具:
htop、pgrep、kill、pkill、killall、nohup。 - 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
- 能够识别本节相关的常见风险、易错点或排查思路。
学习重点
- 主题范围:Linux 进程管理、
htop- 更友好的进程监控工具、pgrep- 根据名称查找进程、进程管理与控制、kill- 终止进程、pkill- 按名称终止进程 - 重点命令:
htop、pgrep、kill、pkill、killall、nohup - 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
- 复习方式:先理解场景,再动手练习,最后对照结果检查
Linux 进程管理
htop - 更友好的进程监控工具
htop 是 top 的增强版,提供更直观的界面和更多的功能,适用于需要更高效和友好的进程监控的场景。
安装与基本用法
安装 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。
示例操作:
- 搜索进程:
按F3键,输入nginx,按回车,htop将高亮显示包含nginx的进程。 - 杀死进程:
使用箭头键选中目标进程,按F9,选择信号(如SIGTERM),按回车终止进程。 - 切换到树状视图:
按F5键,htop将以树状结构显示进程,便于查看父子进程关系。
pgrep - 根据名称查找进程
pgrep 是一个用于根据名称或其他属性查找进程的命令,返回匹配进程的 PID。它简化了进程查找和管理的过程。
基本用法
命令语法:
pgrep [选项] 模式
示例:
查找所有名称包含 ssh 的进程:
pgrep ssh
输出示例:
1320
2001
表示有两个进程名称包含 ssh,其 PID 分别为 1320 和 2001。
常用选项(如 -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:继续执行被暂停的进程。
发送不同信号的示例:
-
发送
SIGTERM:kill -SIGTERM 1500或使用信号编号:
kill -15 1500 -
发送
SIGKILL:kill -SIGKILL 1500或使用信号编号:
kill -9 1500
示例操作:
假设进程 1500 是一个挂起的应用程序,无响应。
- 尝试正常终止:
kill 1500 - 如果进程未响应,强制终止:
kill -9 1500
常见实例与注意事项
实例 1:终止一个僵尸进程
僵尸进程无法被 kill 命令终止,因为它已经完成执行,只等待其父进程回收资源。解决方法是终止父进程,让系统自动回收僵尸进程。
ps aux | grep 'Z'
kill -HUP 1320
实例 2:暂停和恢复进程
虽然 kill 主要用于发送终止信号,但也可以发送暂停(SIGSTOP)和恢复(SIGCONT)信号。
kill -SIGSTOP 1500
kill -SIGCONT 1500
注意事项:
- 权限:只有进程所有者或超级用户才能发送信号。
- 谨慎使用
SIGKILL:强制终止进程可能导致数据丢失或系统不稳定,应尽量先尝试SIGTERM。 - 避免终止关键系统进程:终止如
init、systemd等关键进程可能导致系统崩溃。
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:暂停并后台运行进程
-
启动一个长时间运行的进程,如
gedit:gedit -
按
Ctrl+Z暂停进程:[1]+ Stopped gedit -
将进程放到后台继续运行:
bg[1]+ gedit &
示例 2:查看并恢复后台任务
-
查看后台任务:
jobs[1]+ Running gedit & [2]- Stopped vim -
将
vim恢复到前台:fg %2vim
注意事项:
- 终端关闭影响:后台任务在终端关闭后可能被终止,除非使用
nohup或screen等工具。 - 资源占用:后台进程仍然占用系统资源,应根据需要合理管理。
nohup - 让进程在退出后继续运行
nohup(no hang up 的缩写)用于启动一个进程,使其在用户退出终端或关闭会话后仍然继续运行。常用于运行长时间执行的任务。
基本用法
命令语法:
nohup command [args] &
示例:启动一个长时间运行的脚本 backup.sh,使其在用户注销后继续运行
nohup ./backup.sh &
操作结果:
- 生成
nohup.out文件,记录进程的标准输出和标准错误。 - 进程在后台运行,独立于终端会话。
常见应用场景(如长时间运行的任务)
- 数据备份:启动备份脚本,确保备份任务在用户注销后继续运行。
- 服务器进程:启动需要持续运行的服务器进程,如 Web 服务器、数据库服务器。
- 批处理任务:执行需要较长时间完成的批处理任务,如数据分析、文件转换。
示例操作:
- 启动
backup.sh脚本,并将输出重定向到backup.lognohup ./backup.sh > backup.log 2>&1 & - 验证进程是否在运行
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 启动的进程
- 查找进程 PID
ps aux | grep long_task.py - 终止进程
kill PID
注意事项:
- 保持输出可用:定期检查输出日志文件,确保任务按预期运行。
- 权限:确保有足够的权限启动和管理
nohup进程。 - 资源管理:监控
nohup进程的资源使用,避免占用过多系统资源。
本节总结
- 本节主要围绕 Linux 进程管理、
htop- 更友好的进程监控工具、pgrep- 根据名称查找进程、进程管理与控制、kill- 终止进程 展开。 - 需要重点掌握的命令或工具包括:
htop、pgrep、kill、pkill、killall、nohup。 - 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
- 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。
复习建议
- 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
- 按原文示例至少手敲一遍典型命令,并观察输出变化。
- 对高风险操作先确认路径、权限和目标对象,再执行实际命令。
- 可优先复习这些高频命令:
htop、pgrep、kill、pkill、killall、nohup。