Linux学习之旅7

Linux进程管理实战指南

实践部分

介绍

欢迎你,初级系统管理员!“Google”周一早上异常忙碌,一条紧急警报刚刚发出:主应用服务器出现严重故障,影响所有用户。高级管理员们正在开紧急会议,所以你得负责调查并稳定系统。

现在正是你大显身手的时候。你的任务是深入服务器命令行,通过检查正在运行的进程来诊断问题,排除任何占用资源过大的罪魁祸首,并确保关键服务持续运行。完成这项挑战后,你将证明自己有能力在压力下管理实时 Linux 环境,这是任何系统管理员的核心技能。
重要提示:即将面临的挑战可能超出Linux 快速入门课程的范围, 记得随时使用man帮忙。

Day6 流程监督员

列出活动系统进程

作为进程监控员,您的第一步是全面了解服务器上当前正在运行的进程。所有活动进程的静态快照将有助于您展开调查并识别任何异常情况。

任务
使用一条命令即可生成系统上运行的所有进程的详细列表。
要求
该命令必须显示所有用户的进程,而不仅仅是您自己的进程。
输出格式应面向用户,显示进程所有者、CPU/内存使用情况以及启动进程的完整命令等详细信息。
示例
运行命令后,您应该会看到类似这样的输出:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 169848  9064 ?        Ss   08:30   0:02 /sbin/init
labex     1234  0.0  0.0   2324   564 pts/0    S+   08:35   0:00 bash /home/labex/project/resource_hog.sh
labex     1235  0.0  0.0   2324   564 ?        S    08:35   0:00 bash /home/labex/project/critical_service.sh
...

输出结果将显示多个进程,每列包含用户、进程 ID、CPU 使用率、内存使用率以及启动每个进程的命令。

提示
完成此任务最常用的命令是ps。
想想该ps命令的哪些选项可以以用户友好的格式显示所有用户的进程,并且包括未附加到文本管理器的进程。

在这里插入图片描述
在这里插入图片描述

ps aux

监控过程资源使用情况

静态列表ps是个不错的开始,但服务器负载每秒都在变化。你需要一个实时动态的视图来查看是哪个进程导致了速度下降。是时候启用更强大的监控工具了。

任务
启动交互式命令行实用程序,实时监控系统进程及其资源使用情况。
找出占用 CPU 资源最多的脚本名称。
要求
您必须使用能够提供持续更新的实时系统进程视图的工具。
该工具默认应允许您按 CPU 使用率对进程进行排序。
确定了最重要的消费者后,退出该工具以进行下一步。
示例
启动监控工具后,您应该会看到一个自动更新的交互式显示屏,显示类似以下内容:

top - 09:15:30 up  1:45,  1 user,  load average: 1.50, 1.20, 0.85
Tasks: 105 total,   2 running, 103 sleeping,   0 stopped,   0 zombie
%Cpu(s): 45.0 us,  5.0 sy,  0.0 ni, 50.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   2048.0 total,    850.4 free,    950.2 used,    247.4 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used,      0.0 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1234 labex     20   0   12884   1564   1320 R  95.0   0.1   2:15.30 bash /home/labex/project/resource_hog.sh
 1235 labex     20   0   12884   1564   1320 S   0.0   0.1   0:00.00 bash /home/labex/project/critical_service.sh
    1 root      20   0  169848   9064   6868 S   0.0   0.4   0:02.15 systemd
...

屏幕顶部将显示系统统计信息,下方将显示按 CPU 使用率排序的进程列表,CPU 使用率最高的进程将显示在顶部。

提示
这条常用的命令通常被称为 Linux 世界的“任务管理器”。
您可以按此q键退出此交互式工具。

top

在这里插入图片描述
其实就是window上的任务管理器
在这里插入图片描述

识别关键流程

你已经找到了罪魁祸首:resource_hog.sh。但是,优秀的系统管理员不会随意终止进程。你还注意到某个进程critical_service.sh正在运行。在对这个占用大量资源的进程采取任何措施之前,你应该先识别并了解系统上所有关键的运行进程。

任务
找到脚本的进程 ID (PID) critical_service.sh。
确认关键服务运行正常。
要求
您必须使用pgrep命令来查找正在运行的进程的 PID critical_service.sh。
该命令应能成功找到正在运行的进程并显示其进程 ID (PID)。
示例
使用命令找到 PID 后pgrep,您应该会看到类似这样的输出:

1235

该数字(本例中为 1235)是关键服务流程的流程 ID。

您可以使用以下方式查看流程详情:

ps -p 1235 -o pid,ppid,cmd

输出结果应类似于:

PID PPID CMD
1235 1 /bin/bash /home/labex/project/critical_service.sh

提示
pgrep可以根据进程名称找到进程 ID (PID)。
用于pgrep -f与完整的命令行进行匹配。

ps -p 1235 -o pid,ppid,cmd
命令分解:
ps此命令用于报告当前进程的快照。
-p 1235此选项指定要查询的进程 ID (PID)。在本例中,它是1235。
-o pid,ppid,cmd此选项可自定义输出格式:
pid显示进程 ID。
ppid显示父进程 ID(启动此进程的进程的 ID)。
cmd显示启动该进程的命令。
示例输出:
运行此命令后,您可能会看到类似这样的输出:
PID PPID CMD
1235 1000 /usr/bin/some_process
此输出显示与进程 ID 关联的 PID、PPID 和命令1235。

在这里插入图片描述

在这里插入图片描述

已弃用在这里插入图片描述

终止异常进程

既然您已经确定了关键进程,现在就该处理导致resource_hog.sh服务器运行缓慢的进程了。您需要终止该进程以恢复服务器正常运行。

任务
终止该resource_hog.sh进程。
要求
你必须使用可以根据进程名称终止进程的命令,而无需先找到进程 ID (PID)。
使用该pkill命令停止resource_hog.sh脚本。
示例
要验证进程是否已终止,您可以事后查看进程列表。终止前,您可能会看到:

labex 1234 95.0 0.0 2324 564 pts/0 R+ 09:15 5:00 bash /home/labex/project/resource_hog.sh

成功终止后,运行相同的检查命令应该不会显示任何匹配的进程(只有 grep 命令本身):

labex 2345 0.0 0.0 2324 564 pts/0 S+ 09:20 0:00 grep resource_hog

提示
该pkill命令会根据进程名称向其发送终止信号。
运行该命令后,您可以使用它ps aux | grep resource_hog来验证该进程是否已停止运行。
在这里插入图片描述

如果该命令pkill data_processor未能终止进程,可能由以下几个原因造成:
进程名称不匹配:pkill命令与进程名称匹配。如果实际进程名称不同(例如,如果它在类似 /etc/shell 的 shell 下运行/bin/bash),则可能需要使用 -f--match 选项来匹配完整的命令行:
pkill -f source_hog.sh
权限:请确保您拥有终止该进程所需的权限。如果该进程属于其他用户,您可能需要使用sudo:
sudo pkill -f source_hog.sh
进程仍在运行:执行后pkill,您可以使用以下命令验证进程是否仍在运行:
ps aux | grep source_hog

启动和管理后台进程

服务器又稳定了!干得漂亮!正当你准备休息的时候,一位开发人员发来消息。他们需要你data_processor.sh在服务器上运行一个长时间运行的脚本。你不能为了这个脚本而让终端会话保持几个小时开启。你需要让它在后台运行,这样即使你退出登录,它也能继续运行。

任务
启动data_processor.sh脚本,使其在后台运行,并且不受系统崩溃的影响(即,即使关闭终端也不会停止)。
要求
您必须位于该~/project目录中。
使用nohup命令运行脚本。
使用该&运算符将进程发送到后台运行。
将脚本的所有输出(包括标准输出和标准错误)重定向到名为processor.log.
示例
脚本成功在后台运行后,您应该会看到类似如下的输出:

[1] 3456
nohup: ignoring input and appending output to 'processor.log'

这[1] 3456表示作业编号和进程 ID。您可以通过查看日志文件来验证脚本是否正在运行:

cat processor.log

输出结果可能如下所示:

Starting data processing at Mon Sep 11 10:30:00 UTC 2025

您可以确认该进程仍在运行:

ps aux | grep data_processor

这应该表明后台进程正在运行。

提示
该nohup命令的意思是“不挂断”。
&命令末尾的符号告诉 shell 将该命令作为后台任务运行。
你可以使用 . 重定向标准输出>,使用 . 重定向标准错误2>&1。
在这里插入图片描述
在这里插入图片描述

nohup:使命令运行不受挂起影响,允许其在您注销后继续运行。
./data_processor.sh:您要运行的脚本。
> processor.log将标准输出 (stdout) 重定向到processor.log.
2>&1:将标准错误(stderr)重定向到与 stdout 相同的位置(即processor.log)。
&在后台运行该命令。
ps aux | grep data_processor执行前后的区别:
执行前:如果在执行之前运行此命令data_processor.sh,则可能不会返回任何结果,因为该进程尚未运行。
执行后:运行命令后,将显示data_processor.sh进程的详细信息,包括其 PID、状态和资源使用情况。
S+和的含义R+:
S+:这表示该进程处于“睡眠”状态,并且位于前台进程组中。它正在等待某个事件(例如 I/O)完成。
R+:这表示该进程当前正在“运行”,并且位于前台进程组中。

注解nohup

在这里插入图片描述

覆盖重定向追加重定向
特点1创建新文件或清空已有文件内容创建新文件或追加到已有文件末尾
特点2然后写入新内容保留原有内容,在最后添加新内容
场景每次使用都会覆盖之前的内容适合日志记录等场景

概括

恭喜管理员!您已成功解决关键服务器性能问题,并展现了您精湛的 Linux 进程管理能力。服务器运行稳定,关键服务已优先处理,长时间运行的任务也在后台高效运行。

在此挑战中,您已证明自己具备以下能力:

使用以下命令列出并检查所有正在运行的进程ps。
top使用.实时监控系统资源。
使用以下方法识别重要流程pgrep。
使用以下命令干净地终止行为异常的进程pkill。
nohup使用和来运行和管理注销后仍然存在的后台作业&。
这些都是系统管理、DevOps 或后端开发等任何岗位都必备的基础技能,极具价值。你化危机为机遇,展现了你的专业技能。干得漂亮!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值