linux学习(六)(流程管理(流程优先级,过程信号,流程分叉,kill进程,列出/查找进程,背景/前台流程)

embedded/2025/3/10 11:03:24/

流程管理

流程管理是任何作系统不可或缺的一部分,Linux 也不例外。在 Linux 上运行的每个程序,无论是应用程序还是系统作,都被视为一个进程。这些流程执行不同的任务,但协同工作以提供无缝的作体验。

在 Linux 中,用户可以使用不同的命令来执行各种进程管理任务,例如查看当前正在运行的进程、终止进程、更改进程的优先级等,从而对这些进程进行交互和管理。了解这些命令以及如何有效地使用它们对于 Linux 进程管理至关重要。

例如,ps 命令提供有关当前正在运行的进程的信息:

ps aux

这将列出所有当前正在运行的进程,其中包含进程 ID、运行该进程的用户、它消耗的 CPU 和内存、启动该进程的命令等信息。

top是另一个常见命令。它提供系统当前状态的实时更新视图,包括进程:

top

另一个强大的工具是 ,它可以向进程发送特定信号。例如,您可以使用 (15) 正常停止进程,或使用 (9) 强制停止进程:killSIGTERMSIGKILL

kill -SIGTERM pid
kill -SIGKILL pid

(注意:请替换为要停止的进程 ID)pid

Linux 进程管理就像管理一支工厂里的工人团队——每个程序(如浏览器、数据库)都是一个“工人”,有的在干活(运行中),有的在休息(已停止)。作为管理员,你需要知道谁在干活、谁在偷懒,甚至必要时“解雇”(终止)不听话的工人!


一、查看“工人名单”:谁在干活?

1. ps aux 命令(拍一张全员快照)

ps aux
 

输出示例

USER   PID  %CPU %MEM  COMMAND
root   123  0.5  2.0  nginx
alice 456  20   5.0  python app.py
 

通俗解释

  • USER:工人属于哪个老板(用户)。

  • PID:工号(进程ID),唯一标识。

  • %CPU/%MEM:占用的CPU和内存(比如 python 吃了20% CPU)。

  • COMMAND:工人干的活(启动的命令)。

常用场景

  • 找“偷懒”或“过度加班”的工人(占用资源异常的进程)。

  • 结合 grep 过滤目标(如 ps aux | grep nginx 找 Nginx 进程)。


2. top 命令(实时监控车间大屏)

top
 

输出特点

  • 实时更新(类似股票行情,按 q 退出)。

  • 排序功能:按 P(CPU占用)、M(内存占用)。

  • 关键指标

    • load average:车间整体忙碌程度。

    • %Cpu(s):CPU 使用分布(用户态、内核态、空闲)。

适合场景

  • 服务器突然变卡,快速定位“问题工人”。


二、管理工人:该奖励还是开除?

1. 终止进程:kill 命令(“解雇”工人)

信号编号信号名称作用
1SIGHUP终端挂起(常用于重载配置)
9SIGKILL强制杀死进程(无法拦截)
15SIGTERM请求进程优雅退出(默认)
  • 温和劝退(允许保存工作):

    kill -15 456  # 向PID 456发送SIGTERM信号(礼貌请求退出)
     
  • 强制开除(直接抬走,可能丢数据):

    kill -9 456   # 向PID 456发送SIGKILL信号(强制终止,慎用!)
     
  • -15 代表信号编号 15,即 SIGTERM
  • SIGTERM(Terminate)= “温和地请求进程退出”,它让进程有机会进行清理后再退出

注意

  • 先用 ps aux 或 top 查目标进程的 PID。

  • -9 是最后手段,可能导致程序异常(如文件未保存)。


2. 调整优先级:nice 和 renice(分配轻重任务)
  • 启动低优先级任务

    nice -n 19 tar -zcf backup.tar.gz large_folder  # 压缩任务优先级最低(不影响其他进程)
     
  • 调整运行中任务的优先级

    renice -n 10 -p 456  # 将PID 456的优先级调整为10
     

数值范围:-20(最高优先级)到19(最低)。


三、实际场景案例

问题:网站卡顿,怀疑某个进程吃光 CPU。
  1. 用 top 查CPU占用

    • 发现 python 进程占 90% CPU(PID 789)。

  2. 尝试温和终止

    kill -15 789  # 正常终止,允许程序保存数据
     
  3. 若未响应,强制终止

    kill -9 789   # 强制结束
     
  4. 检查服务恢复情况

    systemctl status nginx  # 确保Web服务恢复正常
     

四、小贴士

  1. 权限问题

    • 普通用户只能管理自己的进程,用 sudo 管理他人进程(如 sudo kill -9 123)。

  2. 替代工具推荐

    • htop:比 top 更直观(支持鼠标操作,需安装)。

    • pkill:按进程名终止(如 pkill nginx)。

  3. 防止误杀

    • 系统关键进程(如 systemd PID 1)不要随意终止!


掌握这些命令,你就能像“工厂主管”一样高效管理 Linux 服务器上的每一个“工人”啦! 🔧

流程管理下的流程优先级

在 Linux 环境中,每个正在运行的任务或本质上的“进程”都被分配了特定的优先级,该优先级会影响其执行时间。这些优先级有助于高效利用系统资源,使 Linux 能够微调执行并智能分配系统资源。

Linux 内核对 proc 结构中的进程进行排序,通常位于文件系统目录下。此结构包含有关所有活动进程的信息,包括其优先级。进程管理下的进程优先级概念是指系统赋予每个进程的优先级。此优先级值(也称为“nice”值)的范围从 -20(最高优先级)到 +19(最低优先级)。/proc

通过了解和管理 proc 优先级,您可以优化系统性能并控制哪些进程或多或少地受到 CPU 的关注。

以下是 Linux 终端中的一个简单命令,用于显示所有进程的进程 ID、优先级和用户:

ps -eo pid,pri,user

要更改任何进程的优先级,您可以使用以下命令:renice

renice -5 -p [PID]   # Increase priority by 5 units for process ID [PID]

Linux 进程优先级就像给任务发“VIP等级卡”——等级越高(VIP号码越小),越容易被 CPU 优先处理。你可以想象成机场的贵宾通道:VIP客户(高优先级进程)可以插队,普通客户(低优先级进程)得排队等候。


优先级规则

  • Nice值范围-20(最高优先级)到 +19(最低优先级)。

    • 默认值:新进程的 Nice 值通常是 0

    • 数值越小 → 优先级越高,CPU 越优先照顾。

    • 数值越大 → 优先级越低,CPU 越不待见。


查看进程优先级

1. 用 ps 查看(显示 PRI 优先级)

ps -eo pid,pri,user,ni,comm
# 输出示例:
# PID   PRI USER  NI COMMAND
# 123   19 root   0 nginx
# 456   24 alice 10 backup.sh

关键列

  • PRI:实际优先级(由内核动态计算,数值越小越优先)。

  • NI:Nice值(用户可调整,影响 PRI)。

  • USER:进程所有者。

  • COMMAND:进程名。


调整优先级

1. 启动新进程时设置优先级nice 命令)

nice -n -5 critical_task.sh  # 以高优先级(Nice=-5)启动任务
 
2. 调整运行中进程的优先级renice 命令)

sudo renice -n -10 -p 456  # 将 PID=456 的进程 Nice值设为-10(需sudo权限)
 

实际场景案例

场景一:后台备份任务不抢资源
  • 目标:让备份脚本 backup.sh 低调运行,不影响网站服务。

  • 操作

nice -n 19 backup.sh  # 以最低优先级启动备份
  • 目标:让卡死的 python 程序优先处理。

  • 步骤

    1. 查 PID:ps aux | grep python → 假设 PID=789

    2. 提权:

      sudo renice -n -20 -p 789  # 设为最高优先级
       

注意事项

  1. 权限限制

    • 普通用户:只能降低优先级(Nice值调大,如 0→10)。

    • Root用户:可自由调整(包括提高优先级)。

  2. 谨慎调高优先级

    • 避免让非关键进程占用过多 CPU,导致系统卡顿。

  3. 查看实时优先级

    • 用 top 命令,按 r → 输入 PID → 修改 Nice值(更直观)。


总结

  • 高优先级(Nice负值):VIP通道,适合关键服务(如Web服务器、数据库)。

  • 低优先级(Nice正值):普通通道,适合后台任务(如备份、日志分析)。

  • 调整口诀

    • 想加速 → Nice值调小(renice -n -5 -p PID)。

    • 想减速 → Nice值调大(renice -n 10 -p PID)。

合理分配优先级,让服务器像智能交通系统一样,关键任务一路绿灯! 🚦

Process Management 下的 Proc Signals

在 Linux 中,进程管理是系统的基本部分,涉及创建、调度、终止和协调进程的执行。其中一个关键方面是 proc 信号或进程信号。

过程信号是 Unix 和 Linux 系统中的一种通信机制。它们提供了一种通知进程同步或异步事件的方法。有多种信号可用,如 SIGINT、SIGSTOP、SIGKILL 等,可以发送到正在运行的进程以中断、暂停或终止它。

例如,要将 SIGSTOP 信号发送到 PID 为 12345 的进程,您可以在终端中使用命令,如下所示:kill

kill -SIGSTOP 12345

这将暂停进程的执行,直到收到 SIGCONT 信号。

了解 proc 信号对于 Linux 中的全面进程管理和资源分配至关重要。

Linux 进程信号就像给程序发送的“遥控指令”——你可以用这些指令让程序暂停、继续、重启,甚至强制关闭。不同的信号对应不同的操作,就像遥控器上的不同按钮!


常见信号与用途

信号名编号用途说明生活比喻
SIGINT2中断程序(键盘 Ctrl+C敲门提醒“该结束了”
SIGTERM15礼貌终止程序(默认 kill礼貌请客人离开
SIGKILL9强制终止程序(无法拒绝)直接断电,不管后果
SIGSTOP19暂停程序(键盘 Ctrl+Z按下暂停键
SIGCONT18恢复已暂停的程序再按播放键
SIGHUP1挂起信号(常用于重启服务)让服务员重新看菜单(重载配置)

如何发送信号?

1. 用 kill 命令(需知道进程PID)
  • 语法kill -信号名或编号 PID

  • 示例

    kill -SIGTERM 1234   # 礼貌终止 PID 1234 的进程
    kill -9 5678         # 强制杀死 PID 5678 的进程(等同 SIGKILL)
     
2. 用快捷键(直接发送给前台进程)
  • Ctrl+C → 发送 SIGINT(终止前台进程)。

  • Ctrl+Z → 发送 SIGTSTP(暂停前台进程,可用 fg 恢复)。


实际场景案例

场景一:优雅重启 Web 服务
  1. 用 SIGHUP 让 Nginx 重新加载配置(不中断服务):

    kill -SIGHUP $(pgrep nginx)  # 查找Nginx PID并发送信号
     
场景二:处理卡死的程序
  1. 先用 SIGTERM 礼貌请求退出:

    kill -15 1234
     
  2. 若未响应,再用 SIGKILL 强制关闭:

    kill -9 1234
     
场景三:暂停与恢复下载任务
  1. 暂停下载进程:

    kill -SIGSTOP 5678
     
  2. 恢复下载:

    kill -SIGCONT 5678
     

注意事项

  1. 权限问题

    • 普通用户只能管理自己的进程(如你的 python 脚本)。

    • 管理他人进程(如系统服务)需 sudo 权限。

  2. SIGKILL 是最后手段

    • 强制终止可能导致数据丢失(如未保存的文件)。

    • 先尝试 SIGTERM,无效再用 SIGKILL

  3. 查看所有信号

    kill -l  # 列出所有支持的信号
     

总结

  • 温柔操作:优先用 SIGTERM(15),给程序清理现场的机会。

  • 暴力解决SIGKILL(9)是终极手段,但慎用!

  • 灵活控制:暂停(SIGSTOP)和恢复(SIGCONT)适合临时调整任务优先级。

就像管理团队,好的管理员会用“信号”让程序们和谐工作,而不是动不动就“炒鱿鱼”(SIGKILL)! 🕹️

流程管理中的流程分叉

进程分叉是 Linux 系统中进程管理下的一个基本概念。该术语是指正在运行的进程(父进程)可以生成自身副本(子进程)的机制,从而支持并发执行两个进程。这是通过 'fork' 系统调用实现的。这是理解 Linux 环境中进程的创建和控制的一个突出方面。

fork 创建的子进程是父进程的近乎完美的副本,但只有几个值(包括进程 ID 和父进程 ID)例外。在子流程中所做的任何更改都不会影响父流程,反之亦然。

以下是 C 语言中 proc 分叉的基本代码片段:

#include<sys/types.h>
#include<unistd.h>
#include<stdio.h>int main()
{pid_t child_pid;// Try creating a child processchild_pid = fork();// If a child is successfully createdif(child_pid >= 0)printf("Child created with PID: %d\n", child_pid);elseprintf("Fork failed\n");return 0;
}

在此代码段中, 用于创建新的子进程。如果进程创建成功,fork() 将返回子进程的进程 ID。如果不成功,则返回负值。fork()

我们可以把进程分叉想象成细胞分裂。一个正在运行的进程(父进程)可以通过 "分裂" 创建一个和自己一模一样的子进程。就像细胞分裂后,两个细胞各自独立生长,父子进程也会独立运行互不影响。

关键点解析:

  1. fork() 是 Linux 的复制魔法:调用 fork() 时,系统会瞬间复制父进程,生成一个子进程。此时内存、代码、打开的文件等信息全被复制。

  2. 父子区别

    • 父进程得到的是子进程的身份证号(PID,正整数)

    • 子进程得到的是数字 0(用于自我识别)

    • 复制失败时返回 -1

  3. 独立运行:分裂后父子进程就像双胞胎,之后各自修改数据互不影响(通过写时复制技术优化性能)。

代码分析(修正版):

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>int main() {pid_t child_pid = fork(); // 开始分裂if (child_pid > 0) {      // 父进程执行这里printf("我是父进程,孩子的PID是:%d\n", child_pid);} else if (child_pid == 0) { // 子进程执行这里printf("我是子进程,我的PID显示为:%d(实际系统分配了新PID)\n", child_pid);} else {                  // 分裂失败printf("分裂失败!");return 1;}return 0;
}

运行现象:

  • 父进程打印类似:"我是父进程,孩子的PID是:1234"

  • 子进程打印类似:"我是子进程,我的PID显示为:0(实际系统分配了新PID)"

  • 实际子进程的真实 PID 由系统分配,不会为 0

日常比喻:
就像影分身术,施术者(父进程)发动分身(fork),分身和本体最初完全一样,但分身知道自己是个分身(通过返回值0),本体知道分身的编号(PID)。之后他们可以执行不同任务,比如本体继续指挥,分身去执行具体工作。

特别说明:
原示例代码未区分父子进程,会导致:

  1. 父子进程都会执行 printf

  2. 子进程显示的 PID 0 容易引起误解建议用修正后的代码来清晰展示区别。

终止进程

在任何 Linux 系统上,无论您是在服务器还是桌面系统上,进程都始终在运行。有时,由于某些原因(如系统错误、意外的系统行为或意外启动),这些进程可能无法按预期运行,并且可能需要终止。这就是 Linux 中终止进程的概念在进程管理领域中出现的地方。

Linux 中的“Kill”是一个内置命令,用于手动终止进程。您可以使用该命令向进程发送特定信号。当我们使用该命令时,我们基本上会请求一个进程来停止、暂停或终止。killkill

以下是有关如何在 Linux 中使用该命令的基本说明:kill

kill [signal or option] PID(s)

在实践中,您需要识别要终止的进程的进程 ID (PID) 并在上述命令中替换 PID。信号或选项部分是可选的,但非常强大,允许特定的终止作。

终止进程就像关掉卡死的程序
当某个程序卡死或异常时,在 Linux 中可以用 kill 命令「关掉」它,就像 Windows 中的「结束任务」。


🔑 核心操作步骤

  1. 找到程序的身份证号(PID)
    用 ps 或 top 命令查进程号,比如:

    ps aux | grep 程序名
    # 示例:找火狐浏览器的 PID
    ps aux | grep firefox
     
  2. 发送「关闭通知」

    kill PID号          # 默认发送「请退出」信号(SIGTERM,编号15)
    kill -9 PID号       # 强制关闭(SIGKILL,编号9)
     

🚦 两种关闭方式对比

信号类型效果类比
SIGTERM礼貌请求退出(允许程序保存数据)温柔提醒:「该下班了」
SIGKILL强制立即关闭(可能丢失数据)直接拔电源

🌰 举个栗子

假设发现「文档编辑器」卡死了:

  1. 查 PID:

    ps aux | grep libreoffice
    # 输出:zhang 1234 ... libreoffice
     

    👉 得到 PID 是 1234

  2. 先尝试正常关闭:

    kill 1234
     
  3. 如果无效,再强制关闭:

    kill -9 1234
     

⚠️ 注意事项

  1. 权限问题:普通用户只能关自己的进程,系统进程需要加 sudo

    sudo kill -9 系统进程PID
     
  2. 风险提示-9 是最后手段,可能导致数据丢失!


📝 小技巧

  • 批量关闭同名进程(如关闭所有火狐):

    killall firefox     # 关闭所有叫 firefox 的进程
    pkill chrome       # 关闭所有含 "chrome" 的进程
     

最终效果:就像在任务管理器中结束任务,让系统恢复流畅~

列出和查找进程 (proc)

在 Linux 中,进程构成了任何正常运行系统的支柱 - 运行各种任务并执行不同的作。为了有效地管理您的 Linux 系统,能够列出和查找当前正在运行的进程至关重要。这有助于监控系统性能、跟踪任何问题以及控制资源分配。

在这方面,文件系统是一个非常强大的工具。所有类 Unix作系统都提供了一个虚拟文件系统,它提供有关正在运行的进程的详细信息,包括其 PID、状态和资源消耗。proc proc

使用、 等命令,我们可以快速列出 Linux 系统上正在运行的进程。具体来说,该命令提供了当前正在运行的进程的深入快照,而 和 则提供了系统性能的实时视图。ps top htop ps top htop

# list all running processes
ps -ef # display ongoing list of running processes 
top# alternatively, for a more user-friendly interface
htop

通过探索 proc 目录 (),我们更深入地了解,使我们能够查看系统的内核参数和每个进程的特定系统详细信息。/proc

# view specifics of a particular PID
cat /proc/{PID}/status

简而言之,Linux 中的“查找和列出进程 (proc)”不仅是进程管理的核心方面,也是提高系统性能和解决问题的必要技能。

🕵️♂️ 进程就像工厂里的工人

Linux 系统中同时运行着成百上千个「工人」(进程),想知道他们在干什么?用这些工具就能「偷窥」他们的工作状态!


🔍 快速查找工人(进程)的三种方式

1️⃣ 拍集体照:ps 命令

一次性拍下所有工人的工作状态(静态快照)

ps aux       # 查看所有进程(最常用)
ps -ef       # 另一种查看方式(带父进程信息)
 

示例输出:

zhang   1234  0.0  0.5 系统程序
root    5678  2.3  1.2 正在运行的浏览器
 
2️⃣ 实时监控:top 命令

像看监控录像一样实时观察工人的一举一动(动态刷新)
👉 按 q 退出,按 P 按 CPU 排序,按 M 按内存排序


3️⃣ 高清监控:htop 命令

升级版监控(需要安装,支持鼠标操作和彩色显示)

sudo apt install htop  # Ubuntu 安装
htop                   # 启动后效果更直观
 

🗂️ 工人的秘密档案:/proc 目录

每个工人都有一个专属档案袋(目录),记录着详细的工作日志:

/proc/1234          # PID 为 1234 的进程档案
├── status          # 工作状态(姓名、工龄、健康状况)
├── cmdline         # 入职时的工作指令
├── exe             # 工作手册存放位置
└── fd/             # 正在使用的工具清单(打开的文件)
 

查看示例:

cat /proc/1234/status  # 查看某个进程的详细状态
cat /proc/cpuinfo      # 顺便还能查看 CPU 信息(彩蛋功能)
 

🔎 快速锁定目标工人的技巧

招式一:精确搜索

ps aux | grep nginx    # 查找所有名字含 "nginx" 的进程
 
招式二:身份证直查

pgrep firefox         # 直接获取火狐浏览器的 PID
 
招式三:全家福筛选

pstree               # 用树形结构查看进程关系(父子进程一目了然)
 

🚨 注意事项

  1. 权限问题:普通用户只能看自己的工人,想看全部要加 sudo

  2. /proc 不是真文件夹:这些档案是系统实时生成的虚拟文件

  3. 别乱改档案:直接修改 /proc 下的文件可能引发系统异常


最终效果:就像拥有了一个超级管理员工牌,随时可以查看每个「工人」的工作状态! 🕶️

管理 bg (后台) 和 fg (前台) 进程

在 Linux 环境中,进程可以在前台 (fg) 或后台 (bg) 运行。前台进程直接从用户那里获取输入,将输出和错误显示到用户的终端。另一方面,后台进程独立于用户的作运行,从而为其他任务腾出终端。

通常,进程在前台启动。但是,您可以通过在命令中附加 & 符号 (&) 或使用命令将其发送到后台。相反,该命令将后台进程置于前台。bgfg

以下是将正在运行的进程发送到后台的方法:

command &

或者,如果进程已在运行:

CTRL + Z       # This will pause the process
bg             # This resumes the paused process in the background

让它回到前台:

fg

这些命令是类 Unix作系统中作业控制的一部分,它允许您从单个终端同时管理多个任务。bg fg

🎮 前台后台就像接电话和听音乐

  • 前台进程:像正在接电话,必须拿着手机不能做其他事(终端被占用)

  • 后台进程:像用蓝牙耳机听歌,手机可以自由操作其他功能(终端可继续使用)


🛠️ 操作三件套

jobs      # 查看当前后台任务列表(带编号)
bg %1     # 把1号任务放后台运行(或继续运行)
fg %2     # 把2号任务拉回前台
 

🔧 具体操作步骤

1️⃣ 直接后台启动

运行命令时加 &,程序直接在后台跑:

python long_script.py &  # 后台运行脚本,终端可用
 
2️⃣ 前台转后台
  1. 按 Ctrl+Z 暂停当前前台程序
    (程序进入「冷冻」状态)

  2. 输入 bg 解冻并放后台运行:

^Z          # 按下 Ctrl+Z
[1]+ Stopped   python big_task.py
bg %1       # 让1号任务在后台继续运行
 
3️⃣ 后台拉回前台

fg %1       # 把1号任务带回前台操作
 

🖥️ 实战案例演示

# 启动下载任务到后台
wget http://bigfile.zip &# 查看后台任务列表(显示 [任务号] 状态 命令)
jobs
# 输出:[1] Running  wget http://bigfile.zip &# 突然需要编辑文件,按 Ctrl+Z 暂停下载
^Z
# 输出:[1]+ Stopped  wget http://bigfile.zip# 继续让下载在后台运行
bg %1# 编辑完文件后,把下载任务拉回前台看进度
fg %1
 

⚠️ 注意事项

  1. 任务编号:每个后台任务都有 %数字 的编号(用 jobs 查看)

  2. 终端关闭:后台任务会随终端退出而终止!需要保持运行要用:

    nohup python task.py &  # 断开终端仍运行
     
  3. 输入阻塞:后台程序如果尝试读取输入会被暂停(显示 Stopped

  4. 状态查看:被暂停的任务需要先用 bg 激活才能继续运行


🌟 高阶技巧

  • 快速切换:直接输 fg 不带编号会操作最近的任务

  • 批量操作

    kill %3    # 终止3号后台任务
    wait %2    # 等待2号任务完成
     

最终效果:像多任务操作系统一样自由切换,边下载文件边敲命令! 🚀


http://www.ppmy.cn/embedded/171477.html

相关文章

mosfet的驱动设计-栅极电阻

栅极电阻在MOSFET驱动电路中具有关键作用&#xff0c;其阻值直接影响器件开关速度、功率损耗及电磁干扰水平。本文将从物理原理出发&#xff0c;推导典型栅极电阻计算公式&#xff0c;并详细说明各参数选取依据。 本人查阅了很多资料&#xff0c;不同的资料介绍的计算方法也不尽…

自己的网页加一个搜索框,调用deepseek的API

一切源于一个学习黑马程序员视频的突发奇想 在网页悬浮一个搜索按钮&#xff0c;点击可以实现调用deepseek文本模型回答你的问题 前端实现 前端使用vue实现的 首先是整体页面&#xff1a;AIWidget.vue <template><div><!-- 悬浮 AI 按钮 --><el-button c…

Linux系统编程--线程同步

目录 一、前言 二、线程饥饿 三、线程同步 四、条件变量 1、cond 2、条件变量的使用 五、条件变量与互斥锁 一、前言 上篇文章我们讲解了线程互斥的概念&#xff0c;为了防止多个线程同时访问一份临界资源而出问题&#xff0c;我们引入了线程互斥&#xff0c;线程互斥其实…

电力场景绝缘子缺陷分割数据集labelme格式1585张4类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;1585 标注数量(json文件个数)&#xff1a;1585 标注类别数&#xff1a;4 标注类别名称:["broken part","broken insulat…

嵌入式 ARM Linux 系统构成(6):应用层(Application Layer)

目录 一、应用层概述 二、应用层的核心组成 2.1 主应用程序&#xff08;Main Applications&#xff09; 2.2 系统服务&#xff08;System Services&#xff09; 2.3 用户界面&#xff08;User Interface&#xff09; 2.4 脚本与自动化工具 2.5 第三方库与框架 2.6 通信…

Spring Boot笔记

01 概要 Spring Boot 是 Java 领域最流行的 快速开发框架&#xff0c;专为简化 Spring 应用的初始搭建和开发而设计。 一、Spring Boot 解决了什么问题&#xff1f; 传统 Spring 痛点 • 繁琐的 XML 配置 • 需要手动管理依赖版本 • 部署依赖外部 Web 服务器&#xff08;如 …

C++:入门详解(关于C与C++基本差别)

目录 一.C的第一个程序 二.命名空间&#xff08;namespace&#xff09; 1.命名空间的定义与使用&#xff1a; &#xff08;1&#xff09;命名空间里可以定义变量&#xff0c;函数&#xff0c;结构体等多种类型 &#xff08;2&#xff09;命名空间调用&#xff08;&#xf…

Windows控制台函数:控制台窗口设置函数system(“mode con ...“)

目录 什么是 system("mode con ...")&#xff1f; 它长什么样&#xff1f; 怎么用它&#xff1f; 再试一个例子 它是怎么工作的&#xff1f; system("mode con ...") 的其他用法 优缺点 注意事项 什么是 system("mode con ...")&#xf…