在 Linux 系统管理中,进程管理至关重要。熟练掌握 Linux shell命令 中与进程管理相关的命令,可以帮助我们监控系统资源使用情况、诊断性能瓶颈、以及优雅地启动、停止和管理各种服务。无论是线上服务器遭遇突发高负载,还是日常开发环境调试,都需要用到这些命令。本文将深入剖析常用的进程管理命令,并结合实际案例,帮助大家提升 Linux 技能。
进程查看:ps、top、htop
ps 命令
ps 命令用于报告当前进程的快照。它提供了丰富的选项,可以根据不同的需求筛选和显示进程信息。
- 常用选项:
ps aux:显示所有用户的进程,包括没有控制终端的进程。a显示所有用户,u显示用户名/启动用户,x显示没有控制终端的进程。ps -ef:显示所有进程的详细信息,包括进程 ID (PID)、父进程 ID (PPID)、CPU 使用率、内存使用率等。e显示所有进程,f使用完整的格式。ps -C <command>:根据命令名筛选进程。例如:ps -C nginx可以显示所有 Nginx 相关的进程。ps -p <pid>:根据进程 ID 筛选进程。 例如:ps -p 12345可以显示 PID 为 12345 的进程信息。ps --sort=-%cpu:按照 CPU 使用率降序排序进程。
示例:
ps aux | head -n 5 # 显示所有进程的前 5 行
ps -ef | grep nginx # 查找包含 nginx 关键字的进程
ps --sort=-%cpu | head # 查看 CPU 占用率最高的进程
top 命令
top 命令动态显示系统资源使用情况和进程列表。它实时更新,可以帮助我们快速发现占用系统资源较多的进程。
- 交互式操作:
q:退出top命令。k:杀死进程 (kill)。需要输入 PID。M:按内存使用率排序。P:按 CPU 使用率排序。1:显示每个 CPU 核心的使用情况 (多核 CPU)。
使用 top 命令观察 Nginx 的 CPU 和内存占用率
如果 Nginx 服务器使用了宝塔面板进行管理,可以使用 top 实时监控 Nginx 进程,特别是当并发连接数增高,导致服务器 CPU 飙升时。 通过 top 命令,快速定位 Nginx 进程,判断是否存在慢请求或其他性能问题。
htop 命令
htop 命令是 top 命令的增强版,提供了更友好的交互界面和更丰富的信息展示。它使用彩色显示,可以更清晰地观察系统资源使用情况。如果系统没有预装 htop,可以通过包管理器安装,如 apt install htop (Debian/Ubuntu) 或 yum install htop (CentOS/RHEL)。
htop 比 top 更方便的一个地方是,可以使用鼠标操作,例如选中进程直接 kill。 使用 shift + H 可以隐藏线程。
进程控制:kill、killall、pkill、nohup
kill 命令
kill 命令用于向进程发送信号。默认情况下,发送 SIGTERM 信号 (15),请求进程终止。如果进程没有响应,可以发送 SIGKILL 信号 (9) 强制终止进程。
- 常用信号:
SIGTERM(15):正常终止信号,进程可以选择忽略或捕获该信号,然后做一些清理工作后退出。SIGKILL(9):强制终止信号,进程无法忽略或捕获该信号,会立即被操作系统终止。 谨慎使用,可能导致数据丢失。SIGHUP(1):挂断信号,通常用于重新加载配置文件,例如 Nginx 使用kill -HUP <pid>重新加载配置。
示例:
kill 12345 # 终止 PID 为 12345 的进程 (发送 SIGTERM)
kill -9 12345 # 强制终止 PID 为 12345 的进程 (发送 SIGKILL)
kill -HUP $(pidof nginx) # 平滑重启 Nginx,重新加载配置文件
killall 命令
killall 命令根据进程名终止进程。比 kill 命令更方便,无需查找 PID。
示例:
killall nginx # 终止所有名为 nginx 的进程
pkill 命令
pkill 命令也是根据进程名终止进程,并且支持更灵活的匹配模式,例如可以使用正则表达式。
示例:
pkill -f 'python my_script.py' # 终止所有包含 'python my_script.py' 字符串的进程
nohup 命令
nohup 命令用于在后台运行命令,即使终端关闭,命令也会继续运行。常用于启动长期运行的服务。
示例:
nohup python my_script.py > my_script.log 2>&1 & # 在后台运行 python 脚本,并将输出重定向到 my_script.log 文件
>:标准输出重定向到文件。2>&1:将标准错误输出重定向到标准输出。&:将命令放入后台执行。
实战避坑: 使用 nohup 命令时,务必将输出重定向到文件,否则输出会写入 nohup.out 文件,可能会占用大量磁盘空间。 另外,使用 nohup 后,需要使用 disown 命令将进程从当前 shell 会话中分离,避免会话结束后进程被终止。
后台进程管理:bg、fg、jobs
bg 命令
bg 命令将暂停的进程放入后台继续运行。通常与 Ctrl+Z 组合使用。 Ctrl+Z 会暂停当前正在运行的进程。
示例:
./my_script.sh # 运行脚本
Ctrl+Z # 暂停脚本
bg # 将脚本放入后台继续运行
fg 命令
fg 命令将后台进程切换到前台运行。
示例:
fg %1 # 将第一个后台进程切换到前台运行
jobs 命令
jobs 命令列出当前会话中的所有后台进程。
示例:
jobs # 列出所有后台进程
实战案例:利用 Linux Shell命令排查 CPU 占用率高的 Nginx 进程
- 使用
top命令找到 CPU 占用率最高的进程。 - 如果发现是 Nginx 进程占用率高,则使用
ps -ef | grep nginx找到所有 Nginx 进程的详细信息,包括 worker 进程的 PID。 - 使用
strace -p <nginx_worker_pid>跟踪 Nginx worker 进程的系统调用,分析是否存在耗时操作,比如频繁的磁盘 I/O 或网络请求。 (需要安装 strace 工具) - 检查 Nginx 的 access log 和 error log,查找是否存在慢请求或错误日志。
- 如果 Nginx 使用了 Lua 脚本,检查 Lua 脚本是否存在性能问题。
通过以上步骤,可以定位 CPU 占用率高的 Nginx 进程的根本原因,并采取相应的优化措施,例如优化 Nginx 配置、调整 worker 进程数量、优化 Lua 脚本等。 理解 Linux shell命令 的强大之处,在于可以将这些命令组合起来,构建自动化脚本,监控和管理系统。
熟练掌握这些 Linux shell命令,可以帮助我们更好地管理 Linux 系统,提升工作效率。在实际工作中,需要根据具体情况灵活运用这些命令,解决各种问题。
冠军资讯
加班到秃头