🎉 限时公测|限量体验29元4核8G39元8核16G云开发环境一个月,助力Vibe Coding新时代!

Linux 进程管理 - 进程监控、控制、作业管理

初级

深入学习 Ubuntu 24.10 Server 进程管理,掌握进程概念、生命周期、监控控制、作业控制、系统资源管理等核心技能。适合初学者的渐进式学习路径。

未知
easylearning团队
更新于 2025-01-15

🚀 实践环境(SSH)

欢迎使用Easylearning为您专属打磨的自由学习实践环境, 登录后马上开始边学边练吧!

StudyBoard

创建StudyBoard练习实例,系统自动连接到实例后,可以在教程中直接发送远程命令到实例中执行并能查看结果,享受更好的学习体验。

Linux 进程管理

Linux 进程管理是系统管理的核心技能之一。在现代操作系统中,有效的进程管理不仅能提高系统性能,还能确保关键服务的稳定运行。本教程将通过实际场景演示,帮助您掌握进程管理的各个方面。

🎯 学习目标

完成本章学习后,您将能够:

  • 进程概念理解: 深入理解 Linux 进程的概念、类型和生命周期,掌握进程调度的基本原理
  • 监控技能掌握: 熟练使用ps、top等工具监控系统进程,识别性能瓶颈
  • 进程控制能力: 掌握进程启动、停止和信号管理,实现精确的进程控制
  • 作业管理应用: 学会前台/后台作业控制和会话管理,提高多任务处理效率
  • 资源监控优化: 监控和优化系统资源使用,提升系统整体性能

🏗️ Linux 进程系统架构

进程的官方定义

进程(Process)是 Linux 系统中的基本执行单元,是程序在执行过程中的实例。每个进程都有自己的地址空间、内存、打开的文件和其他资源。Linux 内核负责创建、调度和管理所有进程,确保它们能够高效地共享系统资源。

工程化类比:工厂生产线模型

可以将 Linux 系统比作一个大型工厂,其中:

  • 进程 = 工厂中的独立生产线,各自生产不同产品
  • 内核调度器 = 工厂总调度中心,分配资源和协调生产
  • CPU时间片 = 工人工作时间,需要在各生产线之间分配
  • 进程状态 = 生产线运行状态(运行中、等待材料、暂停维护等)
  • 进程优先级 = 生产线优先级,决定资源分配顺序

进程管理核心概念

  1. 进程抽象:进程是程序在执行时的实例,包含程序代码、数据、堆栈和系统资源
  2. 进程隔离:每个进程都有独立的虚拟地址空间,确保进程间的安全隔离
  3. 进程调度:内核调度器根据优先级和调度策略分配 CPU 时间片
  4. 进程通信:通过信号、管道、共享内存等机制实现进程间通信
  5. 资源管理:内核跟踪和管理每个进程使用的系统资源

进程生命周期管理

  • 创建:通过 fork() 系统调用创建子进程
  • 执行:通过 exec() 系列函数加载新程序
  • 调度:内核调度器决定进程的执行顺序
  • 终止:进程完成执行或被信号终止
  • 回收:父进程回收子进程的退出状态

进程概念概览

小白理解指南

  • 进程类型:就像公司的不同部门,各有各的职责
  • 进程状态:就像员工的工作状态,有忙碌、休息、暂停等
  • 进程关系:就像公司的组织架构,有上下级和团队关系

1. 进程类型(工厂部门类比)

Linux系统就像一个大工厂,不同类型的进程就像工厂里的不同部门:

进程类型详解

  1. 🔑 init 进程

    • 就像公司总经理,PID永远是1
    • 负责启动和管理所有其他进程
    • 系统启动后第一个运行的进程
  2. ⚙️ 内核线程

    • 就像公司的维护部门
    • 负责系统底层服务(如内存管理、磁盘I/O)
    • 在内核空间运行,普通用户看不到
  3. 👤 用户进程

    • 就像公司的生产部门
    • 运行用户启动的程序(如浏览器、编辑器)
    • 在用户空间运行,可以被用户控制
  4. 🔄 守护进程

    • 就像公司的后勤部门
    • 在后台提供服务(如Web服务器、数据库)
    • 通常在系统启动时自动启动

2. 进程状态(员工工作状态类比)

进程在运行过程中会有不同的状态,就像员工有不同的工作状态:

进程状态详解

  1. 🏃 运行中 (R)

    • 员工正在工作台上干活
    • 进程正在CPU上执行
  2. 😴 睡眠中 (S)

    • 员工在休息室等待任务
    • 进程等待某个事件发生(如用户输入)
  3. ⏸️ 已暂停 (T)

    • 员工被主管叫停,暂时不工作
    • 进程收到停止信号,暂停执行
  4. 👻 僵尸状态 (Z)

    • 员工完成工作,等待主管确认
    • 进程已结束,等待父进程回收资源
  5. 🚫 不可中断 (D)

    • 员工在做重要工作,不能被打断
    • 进程在等待重要的I/O操作完成

3. 进程关系(组织架构类比)

进程之间有层次关系,就像公司的组织架构:

进程关系详解

  1. 👨‍👦 父进程 → 👶 子进程

    • 就像主管创建下属岗位
    • 父进程创建子进程来完成特定任务
    • 父进程负责管理子进程的生命周期
  2. 📞 会话 (Session)

    • 就像一次会议或项目
    • 用户一次登录的所有活动
    • 包含多个进程组
  3. 👥 进程组 (Process Group)

    • 就像项目团队
    • 一组相关的进程
    • 可以同时接收信号(如Ctrl+C)

实际例子

  • 当你打开终端时,创建了一个会话
  • 在终端中运行 ls | grep txt 时,创建了一个进程组
  • lsgrep 是这个进程组中的两个进程

进程生命周期(像看电视一样简单)

把进程想象成一个人看电视的过程:

用最简单的话解释

🎬 出生:程序刚刚启动,就像人刚来到电视机前

📺 排队:等待轮到自己看电视(等待CPU)

👀 看电视:正在看节目(进程正在运行)

📺 等广告:节目播广告,只能等(等待数据加载)

⏸️ 被暂停:妈妈说先去吃饭,暂停看电视(收到暂停信号)

看完了:节目看完了,但还没离开电视机(僵尸状态)

最重要的3个状态

  1. 排队 = 进程准备好了,等CPU
  2. 看电视 = 进程正在CPU上运行
  3. 等广告 = 进程在等待某些东西(文件、网络等)

为什么要排队?

  • 电视机只有一台(CPU只有几个核心)
  • 很多人想看(很多进程想运行)
  • 所以要轮流,每人看一小会儿就换下一个

在命令行里怎么看?

  • ps aux 命令
  • 看 STAT 这一列:
    • R = 正在看电视或排队
    • S = 等广告
    • T = 被暂停
    • Z = 看完了但还没走

📋 进程基础概念

进程与程序的区别

程序是存储在磁盘上的静态可执行文件,而进程是程序的运行实例。一个程序可以同时启动多个进程,每个进程都有自己独立的内存空间和系统资源。

类比理解:程序就像是一份食谱,而进程则是按照这份食谱实际烹饪的过程。同一份食谱可以同时被多个厨师使用(多个进程),每个厨师都有自己的原料和厨具(内存和资源)。

决策流程:如何选择正确的进程管理命令

进程的基本属性

每个进程都有以下基本属性:

  1. PID (进程ID): 系统分配的唯一标识符
  2. PPID (父进程ID): 创建该进程的父进程ID
  3. UID/GID: 进程所属的用户ID和组ID
  4. 优先级: 决定CPU调度顺序的值
  5. 状态: 当前运行状态(运行、睡眠、停止等)
  6. 终端: 关联的控制终端(如果有)
  7. 资源使用: CPU、内存、I/O等资源使用情况

📊 进程监控命令

Level 1: 基本进程查看

初学者推荐命令

请登录以使用远程命令功能
# 显示当前终端的进程
$ps

输出示例:

  PID TTY          TIME CMD
 1234 pts/0    00:00:00 bash
 5678 pts/0    00:00:00 ps
请登录以使用远程命令功能
# 显示所有进程(推荐初学者使用)
$ps aux | less

初学者提示

  • 使用 ps aux 查看所有进程
  • 使用 htop 获得彩色、交互式的进程视图
  • 使用 top 实时监控系统状态

进阶用户命令

请登录以使用远程命令功能
# 显示所有进程详细信息
$ps aux
# 按CPU使用率排序
$ps aux --sort=-%cpu | head -10
# 按内存使用率排序
$ps aux --sort=-%mem | head -10

ps 命令参数记忆法

  • a = all processes (所有进程)
  • u = user-oriented format (用户友好格式)
  • x = processes without controlling ttys (包括无终端进程)

系统管理员命令

请登录以使用远程命令功能
# 自定义输出格式
$ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -10
# 进程树显示
$ps auxf # 显示进程树
$pstree # 树形显示进程关系
$pstree -p # 显示PID的进程树

管理员提示:使用 ps -eo 自定义输出格式,可以精确获取所需信息

Level 2: 实时进程监控

top 命令基础

请登录以使用远程命令功能
# 启动 top
$top

top 界面解读

top - 14:28:48 up  2:41,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 112 total,   1 running, 111 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1977.7 total,    815.5 free,    334.9 used,    827.3 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   1456.8 avail Mem
 
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1234 root      20   0  169372  13256   8768 S   0.3   0.7   0:01.42 sshd
 5678 ubuntu    20   0   11108   3612   3160 R   0.3   0.2   0:00.01 top

top 界面说明

  • 第1行:系统时间、运行时间、用户数、负载平均值
  • 第2行:进程总数及各状态进程数
  • 第3行:CPU使用率(us=用户空间、sy=系统空间、id=空闲)
  • 第4-5行:内存和交换空间使用情况
  • 表格:各进程详细信息

top 内部快捷键

  • q - 退出
  • k - 杀死进程
  • r - 重新设置进程优先级
  • M - 按内存使用排序
  • P - 按CPU使用排序
  • 1 - 显示所有CPU核心
请登录以使用远程命令功能
# 安装并启动 htop(更友好的top替代品)
$sudo apt update
$sudo apt install htop
$htop

htop 优势:彩色界面、鼠标支持、进程树视图、更直观的CPU/内存显示,推荐初学者使用!

进程监控工具箱

工具主要用途适用场景初学者友好度
ps静态进程查看快速检查⭐⭐⭐⭐⭐
top实时监控性能分析⭐⭐⭐
htop增强版实时监控日常监控⭐⭐⭐⭐⭐
pstree进程树关系依赖分析⭐⭐⭐⭐
pgrep进程查找脚本使用⭐⭐⭐
lsof打开文件查看故障排查⭐⭐

🎮 进程控制命令

进程启动和停止

基础进程控制

请登录以使用远程命令功能
# 1. 启动一个后台进程(睡眠300秒)
$sleep 300 &
# 2. 查看刚启动的进程
$jobs
$ps aux | grep sleep
# 3. 查找进程PID
$pgrep sleep
# 4. 终止进程(替换1234为实际的PID)
# 先获取PID:SLEEP_PID=$(pgrep sleep)
# 然后终止:kill $SLEEP_PID
$kill $(pgrep sleep)

练习步骤

  1. 运行 sleep 300 & 启动一个5分钟的后台任务
  2. jobs 查看后台作业
  3. pgrep sleep 找到进程ID
  4. kill $(pgrep sleep) 终止进程
  5. 再次运行 jobs 确认进程已终止

进阶启动控制

请登录以使用远程命令功能
# 1. 启动一个持久的后台进程
$nohup ping google.com > ping_output.log 2>&1 &
# 2. 启动另一个进程并重定向输出
$nohup find /usr -name "*.conf" > find_results.log 2>&1 &
# 3. 查找特定用户的进程(替换为你的用户名)
$pgrep -u $USER
# 4. 查找特定程序的PID
$pidof systemd
# 5. 查找命令的完整路径
$which bash
$which python3
$which ls

练习说明

  • nohup 启动的进程在SSH断开后仍会继续运行
  • 可以用 tail -f ping_output.log 查看实时输出
  • ps aux | grep ping 确认进程在运行

进程终止与故障排查

请登录以使用远程命令功能
# 1. 启动几个测试进程
$sleep 600 &
$sleep 700 &
$ping localhost > /dev/null &
# 2. 查看所有后台作业
$jobs -l
# 3. 使用不同信号终止进程
# 优雅终止(给进程时间清理)
$kill -15 $(pgrep -f "sleep 600")
# 如果进程无响应,强制终止
$kill -9 $(pgrep -f "sleep 700")
# 4. 按名称终止所有同类进程
$killall ping
# 5. 按命令行模式终止进程
$pkill -f "sleep"
# 6. 验证进程是否已终止
$jobs
$ps aux | grep -E "(sleep|ping)" | grep -v grep

练习注意事项

  • 先用 kill -15 (TERM信号) 尝试优雅终止
  • 只有进程无响应时才使用 kill -9 (KILL信号)
  • killall 会终止所有同名进程,使用时要小心
  • jobsps 命令验证进程状态

常见进程控制问题

问题:进程无法终止 解决步骤

  1. 先尝试正常终止:kill PID
  2. 如果无响应,检查进程状态:ps -p PID
  3. 如果状态为 D(不可中断),等待I/O完成
  4. 如果仍无响应,使用强制终止:kill -9 PID

检查点:使用 kill PID 后,通过 ps -p PID 确认进程是否已终止

信号机制

信号系统工作原理

信号是 Linux 系统中进程间通信的重要机制,它提供了一种异步通知机制,允许内核或其他进程向目标进程发送事件通知。信号机制的核心特点:

  1. 异步处理:信号可以在任何时候被发送和接收,不需要进程主动等待
  2. 事件驱动:信号通常用于通知进程发生了特定的系统事件
  3. 优先级处理:某些信号(如 SIGKILL)具有最高优先级,无法被忽略或捕获
  4. 自定义处理:进程可以为大多数信号定义自定义的处理函数

信号处理流程

  1. 信号生成:由内核、其他进程或键盘输入生成信号
  2. 信号传递:内核将信号添加到目标进程的信号队列
  3. 信号检查:进程在适当的时机检查待处理的信号
  4. 信号处理:根据信号类型执行默认操作、忽略或调用自定义处理函数

常见信号应用场景

  • SIGTERM:优雅关闭服务,允许进程清理资源
  • SIGKILL:强制终止无响应的进程
  • SIGHUP:重新加载配置文件,常用于服务管理
  • SIGSTOP/SIGCONT:暂停和恢复进程执行

常用信号参考表

信号名称信号编号功能是否可捕获典型用途
SIGHUP1挂断重新加载配置
SIGINT2中断终端Ctrl+C
SIGQUIT3退出终端Ctrl+\
SIGKILL9强制终止强制结束进程
SIGTERM15终止正常结束进程
SIGSTOP19停止暂停进程
SIGCONT18继续恢复暂停进程

🎯 作业控制

作业控制是 Linux shell 提供的一项重要功能,它允许用户管理多个并发运行的程序。作业控制系统基于进程组和会话的概念,为用户提供了灵活的进程管理能力。

作业控制快速入门

作业控制基础操作

  1. 启动后台作业:command &
  2. 暂停前台作业:按 Ctrl+Z
  3. 查看所有作业:jobs
  4. 将作业调到前台:fg %作业号
  5. 将作业放到后台运行:bg %作业号

作业控制核心概念

  1. 作业(Job):一个或多个相关进程的集合,通常对应一个命令行
  2. 进程组(Process Group):共享同一个进程组 ID(PGID)的进程集合
  3. 会话(Session):一个或多个进程组的集合,通常对应一个登录会话
  4. 控制终端:与会话关联的终端设备,用于接收键盘输入和显示输出

前台与后台的区别

  • 前台作业:可以接收键盘输入,输出直接显示在终端
  • 后台作业:不能接收键盘输入,但可以继续执行并产生输出
  • 终端信号:只有前台作业能接收到终端发送的信号(如 Ctrl+C)

前台和后台作业

基础作业控制练习

请登录以使用远程命令功能
# 步骤1: 启动一个前台进程
$sleep 10
# 步骤2: 启动后台进程
$sleep 30 &
$sleep 60 &
# 步骤3: 查看当前作业
$jobs
$jobs -l
# 步骤4: 启动一个前台进程,然后暂停它
$sleep 100
# 现在按 Ctrl+Z 暂停这个进程
# 步骤5: 查看暂停的作业
$jobs
# 步骤6: 将暂停的作业放到后台继续运行
$bg
# 步骤7: 将后台作业调到前台
$fg %1
# 步骤8: 再次暂停并管理多个作业
# 按 Ctrl+Z 暂停当前进程
# bg %1 # 将作业1放到后台
# fg %2 # 将作业2调到前台

实际应用场景练习

请登录以使用远程命令功能
# 场景1: 长时间运行的搜索任务
$find /usr -name "*.conf" > config_files.txt &
# 场景2: 文件压缩任务(使用小文件夹进行测试)
$tar -czf test_backup.tar.gz /etc/hostname
# 如果想练习暂停恢复,可以用大一点的目录:
# tar -czf backup.tar.gz /var/log
# 然后按 Ctrl+Z 暂停,再用 bg 继续
# 场景3: 多任务并行处理
$find /tmp -type f -name "*.tmp" > tmp_files.txt &
$find /var -name "*.log" -size +1M > large_logs.txt &
# 查看所有后台任务
$jobs -l
# 等待任务完成或手动终止
# kill %1 # 终止作业1
# kill %2 # 终止作业2

常见问题排查练习

请登录以使用远程命令功能
# 问题1: 管理已停止的作业
$sleep 200 &
$sleep 300 &
# 按 Ctrl+Z 暂停一个前台进程后
$jobs -s # 只显示已停止的作业
$jobs -r # 只显示运行中的作业
# 问题2: 防止后台作业输出干扰终端
$ping google.com > ping_output.txt 2>&1 &
$find /usr -name "*.so" > shared_libs.txt 2>&1 &
# 问题3: 创建持久的后台进程
$nohup ping localhost > persistent_ping.log 2>&1 &
# 查看nohup进程
$ps aux | grep ping
# 分离作业(让它不受终端关闭影响)
$sleep 500 &
$disown -h %1
# 验证作业状态
$jobs
$ps aux | grep sleep

练习说明

  1. 基础练习:学会使用 Ctrl+Z、bg、fg、jobs 命令
  2. 实际场景:练习管理真实的后台任务
  3. 问题排查:学会处理常见的作业控制问题
  4. 可以用 kill %作业号killall 进程名 清理测试进程

注意事项

  • 普通后台作业在终端关闭时会被终止
  • 使用 nohup 可以让进程在终端关闭后继续运行
  • 使用 disown 可以将作业从当前shell中分离
  • 练习完成后记得清理测试进程

作业状态管理

🔧 进程优先级管理

进程优先级决定了系统如何分配CPU时间给不同的进程。理解和管理进程优先级对于系统性能优化至关重要。

优先级概念理解

工程化类比:进程优先级就像医院的急诊分诊系统:

  • 高优先级进程 = 急危重症患者,优先处理
  • 普通优先级进程 = 普通门诊患者,按顺序处理
  • 低优先级进程 = 体检患者,在空闲时处理
  • CPU调度器 = 分诊护士,根据优先级安排处理顺序

优先级系统详解

优先级基础练习

请登录以使用远程命令功能
# 步骤1: 查看当前系统进程的优先级信息
$ps -eo pid,ni,pri,pcpu,comm | head -10
# 步骤2: 查看特定进程的详细优先级信息
$ps -eo pid,ni,pri,pcpu,comm | grep bash
# 步骤3: 使用top查看进程优先级(查看NI列)
# 运行top命令,按'q'退出
$top -n 1 | head -15
# 步骤4: 启动一个默认优先级的进程
$sleep 120 &
# 步骤5: 查看刚启动进程的优先级
$ps -eo pid,ni,pri,pcpu,comm | grep sleep

nice 值范围说明

  • -20: 最高优先级(只有root可设置)
  • 0: 默认优先级
  • 19: 最低优先级

优先级计算规则

  • 实际优先级 = 基础优先级 + nice值
  • nice值越小,优先级越高
  • 普通用户只能降低优先级(增加nice值)

记忆技巧:nice值的含义是"对其他进程友好",值越大越友好(优先级越低)

优先级调整实操练习

请登录以使用远程命令功能
# 步骤1: 以低优先级启动一个搜索任务
$nice -n 10 find /usr -name "*.conf" > config_search.txt &
# 步骤2: 以更低优先级启动另一个任务
$nice -n 19 find /var -name "*.log" > log_search.txt &
# 步骤3: 查看这些进程的优先级
$ps -eo pid,ni,pri,pcpu,comm | grep find
# 步骤4: 启动一个普通优先级的进程用于对比
$sleep 200 &
# 步骤5: 调整运行中进程的优先级
# 获取sleep进程的PID并调整其nice值
$SLEEP_PID=$(pgrep sleep | head -1)
$renice 15 $SLEEP_PID
# 步骤6: 验证优先级调整结果
$ps -eo pid,ni,pri,pcpu,comm | grep -E "(find|sleep)"
# 步骤7: 清理测试进程
$killall find sleep

实际应用场景示例

  • 备份任务:nice -n 19 tar -czf backup.tar.gz /home/user/documents/
  • 文件搜索:nice -n 10 find /usr -type f -name "*.so" > shared_libs.txt
  • 系统监控:nice -n 5 watch -n 1 'ps aux --sort=-%cpu | head -10'

权限限制:普通用户只能增加nice值(降低优先级),不能设置负值

高级调度策略练习

请登录以使用远程命令功能
# 步骤1: 查看当前进程的调度策略
$chrt -p $$ # 查看当前shell的调度策略
# 步骤2: 启动一个进程并查看其调度策略
$sleep 300 &
$SLEEP_PID=$(pgrep sleep | tail -1)
$chrt -p $SLEEP_PID
# 步骤3: 查看系统中不同调度策略的进程
$ps -eo pid,class,ni,pri,pcpu,comm | head -10
# 步骤4: 使用批处理调度策略启动任务(普通用户可用)
$chrt -b 0 find /tmp -type f -name "*.tmp" > tmp_files.txt &
# 步骤5: 验证调度策略设置
$FIND_PID=$(pgrep -f "find /tmp")
$chrt -p $FIND_PID
# 步骤6: 对比不同调度策略的进程
$ps -eo pid,class,ni,pri,pcpu,comm | grep -E "(find|sleep)"
# 步骤7: 清理测试进程
$killall find sleep

调度策略类型说明

  • SCHED_NORMAL (TS): 默认调度策略,适合普通任务
  • SCHED_BATCH (B): 批处理调度,适合后台批量任务
  • SCHED_IDLE (IDL): 空闲调度,最低优先级
  • SCHED_FIFO (FF): 先进先出实时调度(需root权限)
  • SCHED_RR (RR): 轮转实时调度(需root权限)

练习说明

  • 普通用户可以使用 NORMAL、BATCH、IDLE 调度策略
  • 实时调度策略(FIFO、RR)需要root权限
  • 使用 ps -eo pid,class,ni,pri,pcpu,comm 可以查看调度类别
  • BATCH调度适合CPU密集型的后台任务

实时调度警告:实时调度策略可能导致系统无响应,仅在必要时使用,且需要root权限

优先级管理最佳实践

任务类型推荐nice值使用场景命令示例
系统关键服务-10 到 -5数据库、Web服务器renice -10 $(pgrep mysql)
交互式应用-5 到 5桌面应用、编辑器nice -n 0 firefox
后台任务5 到 15日志处理、监控nice -n 10 log_analyzer
备份任务15 到 19文件备份、同步nice -n 19 rsync -av /data/ /backup/
批量计算10 到 19科学计算、渲染nice -n 15 render_job

优化建议

  1. 备份和批量任务使用高nice值(低优先级)
  2. 交互式应用保持默认优先级
  3. 关键服务可适当提高优先级(需root权限)
  4. 避免过度使用实时调度策略

🎯 核心概念关系图

📚 扩展阅读


🤔 思考题

  1. 僵尸进程是如何产生的?如何避免和清理僵尸进程?
  2. 在什么情况下应该使用 SIGKILL 信号而不是 SIGTERM 信号?
  3. screen 和 tmux 在会话管理方面有什么区别?各自的优势是什么?
  4. 如何设计一个自动化的进程监控和告警系统?
  5. 进程优先级和实时调度策略如何影响系统性能?在什么场景下应该调整它们?

实践练习

通过实际操作来巩固所学知识,在真实的系统化的训练环境中练习本教程的内容。

Linux 进程管理 - 进程监控、控制、作业管理 - 实践练习

待学习
ID: LINUX_01_PROCESS_MANAGEMENT
未登录
训练服务器:
训练内容:

基于 Linux 进程管理 - 进程监控、控制、作业管理 教程的实践练习