当前位置: 首页 > news >正文

【Linux篇】进程入门指南:操作系统中的第一步

步入进程世界:初学者必懂的操作系统概念

  • 一. 冯诺依曼体系结构
    • 1.1 背景与历史
    • 1.2 组成部分
    • 1.3 意义
  • 二. 进程
    • 2.1 进程概念
      • 2.1.1 PCB(进程控制块)
    • 2.2 查看进程
      • 2.2.1 使用系统文件查看
      • 2.2.2 使⽤top和ps这些⽤⼾级⼯具来获取
      • 2.2.3 通过系统调用获取进程标识符
    • 2.3 创建子进程
    • 2.4 进程状态
      • 2.4.1 查看进程状态
  • 三. 最后

前言

在计算机系统中,进程是执行程序的基本单位。它不仅仅是代码的集合,更是操作系统管理和分配资源的核心对象。每当我们运行一个应用程序,操作系统就会为其创建一个进程,使得程序能够在计算机中独立执行并进行资源管理。理解进程的概念对于深入学习操作系统和高效利用计算机资源至关重要。 接下来的篇章将带领大家深入探讨进程管理。

💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力!
👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗?别忘了点赞、收藏并分享给更多的小伙伴哦!你们的支持是我不断进步的动力!
🚀 分享给更多人:如果你觉得这篇文章对你有帮助,欢迎分享给更多对Linux OS感兴趣的朋友,让我们一起进步!

一. 冯诺依曼体系结构

在这里插入图片描述

1.1 背景与历史

冯·诺依曼体系结构是现代计算机的基础设计模型,由约翰·冯·诺依曼于1945年提出。该结构的核心思想是将程序和数据存储在同一个内存中,计算机通过中央处理单元(CPU)按顺序执行指令。再此向大佬致敬。👏

1.2 组成部分

  • CPU(中央处理器)由运算器和控制器组成。

存储器(内存)是CPU进行读、获取的必要手段,CPU执行程序,必须先加载,将代码及数据加载到内存,CPU执行代码,访问数据。

结构由五个基本组成部分构成:输入设备、输出设备、存储器、运算器和控制单元。

1.3 意义

它的意义在于简化了计算机设计,提高了计算机的可编程性,使得不同的程序可以通过修改存储器中的指令和数据来实现多种功能。冯·诺依曼体系结构成为现代计算机系统的标准架构,推动了计算机技术的飞速发展。

二. 进程

2.1 进程概念

进程是程序的一次执行实例,是操作系统进行资源分配和调度的基本单位。它拥有独立的内存空间、系统资源(如文件句柄、网络端口)和运行状态。

本人理解:进程 = 内核数据结构对象 + 代码和数据 (进程 = PCB(进程控制块) + 代码和数据)

2.1.1 PCB(进程控制块)

进程的所有属性全保存在PCB中,Linux操作系统下的PCB为 task_struct, 该结构体为Linux内核中的一种数据结构,它会被加载到内存(RAM)中。

task_struct具有的部分信息,另一部分的信息将在后续的博客讲解

标⽰符: 描述本进程的唯⼀标⽰符,⽤来区别其他进程。
• 状态: 任务状态,退出代码,退出信号等。
• 优先级: 相对于其他进程的优先级。
• 程序计数器: 程序中即将被执⾏的下⼀条指令的地址。
• 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
• 上下⽂数据: 进程执⾏时处理器的寄存器中的数据[休学例⼦,要加图CPU,寄存器]。
• I∕O状态信息: 包括显⽰的I/O请求,分配给进程的I∕O设备和被进程使⽤的⽂件列表。
• 记账信息: 可能包括处理器时间总和,使⽤的时钟数总和,时间限制,记账号等。

OS如何对各种进程进行的管理的?先描述,在组织。
所有运行的进程都以 task_struct 链表的形式存在内核中。
在这里插入图片描述

2.2 查看进程

2.2.1 使用系统文件查看

命令格式:

ls /proc/ [pid]

  • 功能

查看指定进程的进程信息。不加pid则查看所有进程的信息

2.2.2 使⽤top和ps这些⽤⼾级⼯具来获取

命令格式:

  • ps ajx | grep myprocess | grep -v grep

2.2.3 通过系统调用获取进程标识符

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
printf("pid: %d\n", getpid());
printf("ppid: %d\n", getppid());
return 0;
}
  • getpid()系统调用,用于获取当前进程的 PID(Process ID),在子进程中调用 getpid(),返回的是子进程自身的 PID。
  • getppid()系统调用,用于获取当前进程的父进程PID。

2.3 创建子进程

示例代码:

#include<stdio.h>
#include<unistd.h>
#include <sys/types.h>int gval = 100;int main()
{printf("父进程开始运行 ,pid: %d\n",getpid());pid_t id = fork();if(id < 0){perror("id");return 1;}else if(id == 0){printf("我是一个子进程 !, 我的pid:%d, 我的父进程id:%d, gval: %d\n",getpid(),getppid(),gval);sleep(5);//childwhile(1){sleep(1);printf("子进程修改变量 : %d -> %d", gval,  gval+10);gval+=10;printf("我是一个子进程 !, 我的pid:%d, 我的父进程id:%d\n",getpid(),getppid());}}else{//fatherwhile(1){sleep(1);printf("我是一个父进程 !, 我的pid:%d, 我的父进程id:%d, gval: %d\n",getpid(),getppid(),gval);}}printf("进程开始运行 ,pid: %d\n",getpid());return 0;
}

子进程会共享父进程的代码和数据,如果父子任何一方对数据进行修改,OS系统会在底层第数据进行拷贝,让目标进程修改这个拷贝。

问题1:为什么fork给父子返回各自不同的返回值?

  • 父进程中的返回值:

fork() 在父进程中返回 子进程的 PID(进程 ID)。这个 PID 是一个正整数,唯一标识子进程。父进程可以使用该 PID 来跟踪子进程,执行如等待子进程结束、获取子进程的状态等操作。

  • 子进程中的返回值:

在子进程中,fork() 返回 0。子进程通过这个返回值可以判断自己是否是子进程,父进程通过返回值判断是否是父进程。

问题2:为什么一个函数会返回两次?

  • 父进程的情况:

返回值是子进程的 PID(进程ID),是一个正整数。

父进程用这个 PID 来识别和管理子进程。父进程可以使用这个 PID 来执行如 wait()、waitpid() 等系统调用,等待子进程终止或获取子进程的退出状态。

  • 子进程的情况:

返回值是 0。

子进程用返回值 0 来判断自己是子进程,以便执行不同于父进程的代码。子进程可能会通过这个返回值执行某些特定的初始化工作或处理。

结论:fork() 会返回两次是因为它在父进程和子进程中分别执行,父进程获得的是子进程的 PID,子进程获得的是 0。通过这个返回值,父进程和子进程可以执行不同的代码,保证了进程的正确管理和并行执行。

问题3:fork两个返回值各种给⽗⼦如何返回?

  • 父进程:父进程使用返回子进程的PID,来管理或等待子进程。
  • 子进程:子进程返回0,子进程用这个值来判断自己是子进程,以执行不同于父进程代码逻辑(比如初始化、执行任务等)。
  • fork返回负值,表示fork调用失败(资源不足等)它会返回 -1,并且没有子进程创建。操作系统会设置 errno 来表示具体的错误原因。

2.4 进程状态

请看Linux内核关于进程状态的描述:

static const char *const task_state_array[] = {
“R (running)”, /*0 */
“S (sleeping)”, /*1 */
“D (disk sleep)”, /*2 */
“T (stopped)”, /*4 */
“t (tracing stop)”, /*8 */
“X (dead)”, /*16 */
“Z (zombie)”, /*32 */
};

  1. R(running): 运行状态,表示某进程正在运行或准备运行。
  2. S(sleep): 睡眠状态,进程在等待某些事件完成(也称为浅度睡眠,可中断睡眠)。
  3. D(disk sleep): 磁盘休眠状态,进程通常在等待I/O操作完成(也称为深度睡眠,不可中断睡眠)。
  4. T(stopped): 停止状态,可以通过发送信号让该进程继续进行。
  5. t(Tracing stop): 通常是在进行调试或进程跟踪时出现的状态。
  6. X(dead): 死亡状态,不会出现在进程列表中。
  7. Z(Zombie): 僵尸状态,子进程已结束,父进程为获取子进程的退出信息。

2.4.1 查看进程状态

使用ps aux 或 ps ajx 命令可以查看进程的详细状态。
命令选项含义:

  • a:显⽰⼀个终端所有的进程,包括其他⽤⼾的进程。
  • x:显⽰没有控制终端的进程,例如后台运⾏的守护进程。
  • j:显⽰进程归属的进程组ID、会话ID、⽗进程ID,以及与作业控制相关的信息。
  • u:以⽤⼾为中⼼的格式显⽰进程信息,提供进程的详细信息,如⽤⼾、CPU和内存使⽤情况等。

僵尸进程危害
进程的退出状态必须被维持下去,因为他要告诉关⼼它的进程(⽗进程),你交给我的任务,我办的怎么样了。可⽗进程如果⼀直不读取,那⼦进程就⼀直处于Z状态。
• 维护退出状态本⾝就是要⽤数据维护,也属于进程基本信息,所以保存在task_struct(PCB)中,
换句话说,Z状态⼀直不退出,PCB⼀直都要维护?是的!
• 那⼀个⽗进程创建了很多⼦进程,就是不回收,是不是就会造成内存资源的浪费。因为数据结构对象本⾝就要占⽤内存,想想C中定义⼀个结构体变量(对象),是要在内存的某个位置进⾏开辟空间!
• 内存泄漏

孤儿进程

⽗进程如果提前退出,那么⼦进程后退出,进⼊Z之后,那该如何处理呢?
• ⽗进程先退出,⼦进程就称之为“孤⼉进程”
• 孤⼉进程被1号init进程领养,当然要有init进程回收

如何避免孤儿进程

  1. 父进程等待子进程退出(避免子进程成为孤儿进程)

父进程可以通过适当的进程管理确保它会在子进程结束时正确地回收子进程的资源,避免进程成为孤儿进程。常用的技术包括:

wait() 或 waitpid():父进程可以使用 wait() 或 waitpid() 来等待子进程结束,并获取子进程的退出状态,从而清理和回收子进程的资源。这样,即使父进程在结束之前退出,它也能确保子进程的资源得到回收。

  1. 使用 signal() 或 sigaction() 捕获终止信号

如果父进程结束时没有来得及清理子进程的资源,可以通过捕获特定信号(如 SIGCHLD)来及时回收子进程的资源。通过设置 SIGCHLD 信号处理函数,父进程可以在子进程结束时自动清理。

  1. 避免父进程直接退出

父进程应该在子进程完成后再退出,例如通过使用 wait() 等系统调用等待子进程完成后再退出。如果父进程在子进程结束前退出,可能导致子进程变成孤儿进程。

定期检查子进程状态,使用 waitpid() 等方法主动回收子进程的资源。

三. 最后

本文主要介绍了操作系统中的进程管理,包括冯诺依曼体系结构、进程概念、进程控制块(PCB)、进程状态及如何查看和管理进程。
冯诺依曼体系结构是现代计算机设计的基础,它将程序和数据存储在同一内存中,提升了计算机的可编程性。进程则是程序的执行实例,操作系统通过进程控制块(PCB)来管理进程的资源和状态。进程通过 fork() 创建子进程,父子进程通过返回值区分身份。进程有不同的状态,如运行、睡眠、停止等,父进程可以通过 wait() 等系统调用回收子进程资源,避免孤儿进程的产生。如果父进程提前退出,子进程可能成为孤儿进程,操作系统会由 init 进程接管。为了避免孤儿进程,父进程应在子进程结束后再退出,并通过信号捕获机制及时清理资源。

路虽远,行则将至;事虽难,做则必成

亲爱的读者们,下一篇文章再会!! \color{Red}亲 爱 的 读 者 们 , 下 一 篇 文 章 再 会 ! ! 亲爱的读者们,下一篇文章再会!!

相关文章:

【Linux篇】进程入门指南:操作系统中的第一步

步入进程世界&#xff1a;初学者必懂的操作系统概念 一. 冯诺依曼体系结构1.1 背景与历史1.2 组成部分1.3 意义 二. 进程2.1 进程概念2.1.1 PCB&#xff08;进程控制块&#xff09; 2.2 查看进程2.2.1 使用系统文件查看2.2.2 使⽤top和ps这些⽤⼾级⼯具来获取2.2.3 通过系统调用…...

Linux进程状态补充(10)

文章目录 前言一、阻塞二、挂起三、运行R四、休眠D五、四个重要概念总结 前言 上篇内容大家看的云里雾里&#xff0c;这实在是正常不过&#xff0c;因为例如 写实拷贝 等一些概念的深层原理我还没有讲解&#xff0c;大家不用紧张&#xff0c;我们继续往下学习就行&#xff01;&…...

STM32_HAL开发环境搭建【Keil(MDK-ARM)、STM32F1xx_DFP、 ST-Link、STM32CubeMX】

安装Keil(MDK-ARM)【集成开发环境IDE】 我们会在Keil(MDK-ARM)上去编写代码、编译代码、烧写代码、调试代码。 Keil(MDK-ARM)的安装方法&#xff1a; 教学视频的第02分03秒开始看。 安装过程中请修改一下下面两个路径&#xff0c;避免占用C盘空间。 Core就是Keil(MDK-ARM)的…...

全自动数字网络机器人:重塑未来的无形引擎 ——从金融量化到万物互联,为何必须“ALL IN”?

全自动数字网络机器人&#xff1a;重塑未来的无形引擎 ——从金融量化到万物互联&#xff0c;为何必须“ALL IN”&#xff1f; &#xff08;2025年3月29日&#xff09; “未来十年&#xff0c;代码将比石油更具价值。” —— DeepSeek创始人梁文锋 一、数据洪流与AI进化&#…...

每日一题之修建灌木

问题描述 爱丽丝要完成一项修剪灌木的工作。 有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌 木, 让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始, 每天向右修剪一棵灌木。当修剪了最右侧的灌木后, 她会调转方向, 下一天开 始向左修…...

智能仪表板DevExpress Dashboard v24.2新版亮点:支持.NET 9

使用DevExpress BI Dashboard&#xff0c;再选择合适的UI元素&#xff08;图表、数据透视表、数据卡、计量器、地图和网格&#xff09;&#xff0c;删除相应参数、值和序列的数据字段&#xff0c;就可以轻松地为执行主管和商业用户创建有洞察力、信息丰富的、跨平台和设备的决策…...

ubuntu下终端打不开的排查思路和解决方法

问题现象描述&#xff1a;ubuntu开机后系统桌面显示正常&#xff0c;其他图形化的app也都能打开无异常&#xff0c;唯独只有terminal终端打不开&#xff0c;无论是鼠标点击终端软件&#xff0c;还是ctrlaltt&#xff0c;还是altF2后输入gnome-terminal后按回车&#xff0c;这三…...

鸿蒙项目源码-天气预报app-原创!原创!原创!

鸿蒙天气预报项目源码包运行成功含文档ArkTS语言。 我半个月写的原创作品&#xff0c;请尊重原创。 原创作品&#xff0c;盗版必究&#xff01;&#xff01;&#xff01;&#xff01; 原创作品&#xff0c;盗版必究&#xff01;&#xff01;&#xff01;&#xff01; 原创作品…...

Turtle事件处理(键盘与鼠标交互)

Turtle 提供了 事件驱动编程,允许我们使用 键盘 和 鼠标 控制 Turtle,从而实现交互式绘图。例如,我们可以让 Turtle 响应 按键、鼠标点击 和 拖动 事件,使其根据用户的输入进行移动、旋转或绘制图形。 1. 事件机制概述 Turtle 的事件处理主要依赖 turtle.Screen() 提供的 …...

算法基础——模拟

目录 1 多项式输出 2.蛇形方阵 3.字符串的展开 模拟&#xff0c;顾名思义&#xff0c;就是题⽬让你做什么你就做什么&#xff0c;考察的是将思路转化成代码的代码能⼒。这类题⼀般较为简单&#xff0c;属于竞赛⾥⾯的签到题&#xff08;但是&#xff0c;万事⽆绝对&#xff…...

惠普(HP)和联想(Lenovo)作为全球两大电脑品牌,并不是简单的“拼接电脑”

惠普&#xff08;HP&#xff09;和联想&#xff08;Lenovo&#xff09;作为全球两大电脑品牌&#xff0c;并不是简单的“拼接电脑”&#xff0c;它们都有自己的核心技术、专利设计和生态体系。以下是它们“自己的”核心部分&#xff1a; 1. 关键自研技术 品牌自研技术/专利说明…...

一些练习 C 语言的小游戏

一些练习 C 语言的小游戏 — 1. 猜数字游戏 描述&#xff1a;程序随机生成一个数字&#xff0c;玩家需要猜测这个数字&#xff0c;并根据提示&#xff08;太高或太低&#xff09;调整猜测&#xff0c;直到猜中为止。 功能点&#xff1a; 随机数生成 (rand() 函数)。循环和…...

曲线拟合 | Matlab基于贝叶斯多项式的曲线拟合

效果一览 代码功能 代码功能简述 目标&#xff1a;实现贝叶斯多项式曲线拟合&#xff0c;动态展示随着数据点逐步增加&#xff0c;模型后验分布的更新过程。 核心步骤&#xff1a; 数据生成&#xff1a;在区间[0,1]生成带噪声的正弦曲线作为训练数据。 参数设置&#xff1a…...

Python 序列构成的数组(对序列使用+和_)

对序列使用和* Python 程序员会默认序列是支持 和 * 操作的。通常 号两侧的序列由 相同类型的数据所构成&#xff0c;在拼接的过程中&#xff0c;两个被操作的序列都不会被 修改&#xff0c;Python 会新建一个包含同样类型数据的序列来作为拼接的结果。 如果想要把一个序列…...

洛谷题单1-P5703 【深基2.例5】苹果采购-python-流程图重构

题目描述 现在需要采购一些苹果&#xff0c;每名同学都可以分到固定数量的苹果&#xff0c;并且已经知道了同学的数量&#xff0c;请问需要采购多少个苹果&#xff1f; 输入格式 输入两个不超过 1 0 9 10^9 109 正整数&#xff0c;分别表示每人分到的数量和同学的人数。 输…...

计算机网络 用deepseek帮助整理的复习资料(一)

### 计算机网络基础知识整理 --- #### **一、网络类型** 1. **局域网 (LAN)** - **定义**&#xff1a;覆盖小范围&#xff08;如家庭、教室、公司&#xff09;。 - **特点**&#xff1a;高带宽、低延迟&#xff0c;设备通过交换机互联。 - **示例**&#xff1…...

虚拟电商-话费充值业务(二)话费充值对接供应商模块开发

一、对接供应商模块开发 供应商对接模块chongba_recharge_supplier主要负责的就是调用外部的供应商系统进行充值下单&#xff0c;这种调用是一种基于HTTP协议的调用。 此外在供应商对接模块中主要是实现的业务逻辑有&#xff1a; 1&#xff1a;余额或押金不足情况下的失败轮…...

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例3,TableView16_03 拖拽视觉反馈示例

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例3,TableView16_03 拖…...

游戏引擎学习第186天

回顾并规划今天的任务 现在&#xff0c;我们站在了一个关键的时刻&#xff0c;准备突破&#xff0c;拥有一些优秀的性能分析代码。从目前来看&#xff0c;我们已经能够看到时间的消耗情况&#xff0c;我对这一点感到非常兴奋。昨天的直播中我们勉强让一些东西工作了&#xff0…...

树的基础_遍历(蓝桥云课)

一些树上问题&#xff1a; 树的直径&#xff1a; import java.util.*;public class TreeDiameter {static List<List<Integer>> tree; // 用邻接表存储树结构static int[] depth; // 记录每个节点的深度public static void main(String[] args) {S…...

29_项目

目录 http.js 1、先注册账号 register.html 2、再登录 login.html 3、首页 index.html 4 详情 details.html cart.html css index.css register.css details.css 演示 进阶 http.js let baseURL "http://localhost:8888"; let resgiterApi baseURL &…...

vue搭建一个树形菜单项目

首先搭建项目需要先通过步骤搭建一个vue的项目&#xff0c;然后创建一个component文件&#xff0c;里面新建一个index.vue页面来。 这是引入的element-ui组件库里的组件&#xff0c;来实现我的路由&#xff0c;渲染的是我存储的动态路由&#xff0c;所以需要先安装并且引用。 …...

Python包管理完全指南:pip常用命令与最佳实践

一、pip核心功能解析 作为Python官方推荐的包管理工具&#xff0c;pip承担着以下关键职责&#xff1a; 从PyPI&#xff08;Python Package Index&#xff09;仓库安装/卸载第三方库管理项目依赖关系和版本控制支持本地/私有仓库的包安装维护虚拟环境中的包隔离 二、20个必知…...

Eigen 3

本文来源&#xff1a;腾讯元宝 Eigen 3 是一个专注于线性代数运算的高性能 ​C 模板库&#xff0c;广泛应用于科学计算、机器学习、计算机视觉等领域。以下是其核心特性与功能的综合介绍&#xff1a; 1. ​核心定义与设计理念 ​纯头文件库&#xff1a;Eigen 3 无需编译或链接…...

数字化转型国家标准- GB/T 45341-2025《数字化转型管理 参考架构》

GB/T 45341-2025《数字化转型管理 参考架构》 前言一、数字化转型的根本任务二、标准的主要内容2.1、 核心概念2.2、总体框架2.3、 主要视角2.4、过程方法2.5、 发展阶段与水平档次 前言 在工业和信息化部和国家标准化管理委员会的指导下&#xff0c;全国信息化和工业化融合管…...

Redis 源码硬核解析系列专题 - 第三篇:核心数据结构之字典(Dict)

1. 引言 字典(Dict)是Redis的核心数据结构之一,用于实现键值存储(Redis数据库的核心)和内部元数据管理(如客户端状态)。Redis的字典基于哈希表实现,支持高效的增删改查操作。本篇将深入剖析其源码实现,包括哈希表结构、冲突解决和渐进式rehash机制。 2. 字典的结构体…...

JS—异步编程:3分钟掌握异步编程

个人博客&#xff1a;haichenyi.com。感谢关注 一. 目录 一–目录二–引言三–JavaScript 事件循环机制四–定时器的秘密&#xff1a;setTimeout 和 setInterval五–异步编程模型对比 二. 引言 在现代Web开发中&#xff0c;异步编程是提升性能的关键技术。无论是脚本加载&am…...

Linux C语言调用第三方库,第三方库如何编译安装

在 Linux 环境下使用 C 语言调用第三方库时&#xff0c;通常需要先对第三方库进行编译和安装。以下为你详细介绍一般的编译安装步骤&#xff0c;并给出不同类型第三方库&#xff08;如使用 Makefile、CMake 构建系统&#xff09;的具体示例。 一般步骤 1. 获取第三方库源码 …...

gogs私服搭建

一.介绍&#xff1a; gogs是一个用Go语言开发的自助Git服务&#xff0c;目标是简单、快速搭建Git服务&#xff0c; 支持多种平台&#xff0c;包括Linux、Windows等。它类似于GitHub&#xff0c;但更轻量&#xff0c;适合个人或小团队使用&#xff0c; 在简化git服务搭建流程的…...

python和c中作用域的差异

好的&#xff0c;我将详细列举 Python 和 C 语言在作用域规则上的主要差异&#xff0c;并为每种差异提供具体的代码示例&#xff0c;以便更清晰地理解它们之间的不同。 1. 块级作用域&#xff08;Block Scope&#xff09; C 语言 在 C 语言中&#xff0c;任何用 {} 包裹的代…...

C++ 中将函数作为参数传递

C 中将函数作为参数传递 1. 通过指针传递函数 函数可以通过传递函数的地址来作为参数传递&#xff1b;简而言之&#xff0c;就是通过指针实现这一点。 示例代码 #include <iostream> using namespace std;// 定义加法和减法函数 #include <iostream> #include …...

【C++】右值引用与完美转发

目录 一、右值引用&#xff1a; 1、左值与右值&#xff1a; 2、左值引用和右值引用&#xff1a; 二、右值引用的使用场景&#xff1a; 1、左值引用的使用场景&#xff1a; 2、右值引用的使用场景&#xff1a; 移动构造 移动赋值 三、完美转发&#xff1a; 1、万能引用…...

批量合并 PDF 文档,支持合并成单个文档,也支持按文件夹合并 PDF 文档

在日常工作中&#xff0c;合并多个 PDF 文档为一个文件是非常常见的需求。通过合并 PDF&#xff0c;不仅能够更方便地进行管理&#xff0c;还能在特定场景下&#xff08;如批量打印&#xff09;提高效率。那么&#xff0c;当我们需要批量合并多个 PDF 文件时&#xff0c;是否有…...

SQL Server 备份相关信息查看

目录标题 一、统计每个数据库在不同备份目录和备份类型下的备份次数&#xff0c;以及最后一次备份的时间整体功能详细解释 二、查询所有完整数据库备份的信息&#xff0c;包括备份集 ID、数据库名称、备份开始时间和备份文件的物理设备名称&#xff0c;并按备份开始时间降序排列…...

Flutter_学习记录_AppBar中取消leading的占位展示

将leading设置为null将automaticallyImplyLeading设置为false 看看automaticallyImplyLeading的说明&#xff1a; Controls whether we should try to imply the leading widget if null. If true and [AppBar.leading] is null, automatically try to deduce what the leading…...

多省发布!第27届中国机器人及人工智能大赛各赛区比赛通知

01 大赛介绍 中国机器人及人工智能大赛是由中国人工智能学会主办的极具影响力的全国性学科竞赛&#xff0c;旨在推动我国机器人及人工智能技术的创新与应用&#xff0c;促进相关专业的人才培养。作为全国高校学科竞赛A类赛事&#xff0c;该比赛吸引了众多高校和科研机构的积极…...

leetcode199 二叉树的右视图

小问题&#xff1a;if(!q.empty()) 这个条件会导致只处理一层&#xff0c;而不会处理所有层。正确的做法应该是用 while(!q.empty()) 循环处理每一层。 class Solution { public:vector<int> rightSideView(TreeNode* root) {vector<int> res;queue<TreeNode…...

大模型评测框架evalscope、openCompass

一、evalscope使用说明 1、如何使用智增增的接口&#xff1a; VLLM_USE_MODELSCOPETrue evalscope eval \--model qwen2.5-14b-instruct \--api-url https://api.zhizengzeng.com/v1/chat/completions \--api-key skxxx \--eval-type service \--datasets gsm8k \--limit 10 …...

接口自动化——初识pytest

缩写单词含义.passed通过Ffailed失败&#xff08;用例执行时报错&#xff09;Eerror出错&#xff08;fixture执行报错&#xff09;sskipped跳过Xxpassed预期外的通过&#xff08;不符合预期&#xff09;xxfailed预期内的失败&#xff08;符合预期&#xff09; 1.pytest 配置 1…...

SkyWalking实战

1、下载SkyWalking APM 1.手动下载 Downloads | Apache SkyWalkinghttps://skywalking.apache.org/downloads/ 2.链接下载 https://dlcdn.apache.org/skywalking/10.2.0/apache-skywalking-apm-10.2.0.tar.gzhttps://dlcdn.apache.org/skywalking/10.2.0/apache-skywalking-…...

游戏AI实现-GOAP

GOAP原理&#xff1a; GOAP&#xff08;面向目标的行动规划&#xff0c;Goal - Oriented Action Planning&#xff09; 旨在让智能体通过选择一系列行动来达成特定目标。它基于对世界状态的理解&#xff0c;每个行动都有前提条件和效果。智能体通过分析当前世界状态与目标状态…...

Baklib内容中台的核心优势是什么?

智能化知识管理引擎 Baklib的智能化知识管理引擎通过多源数据整合与智能分类技术&#xff0c;实现企业知识资产的自动化归集与动态更新。系统内置的语义分析算法可自动识别文档主题&#xff0c;结合自然语言处理技术生成结构化标签体系&#xff0c;大幅降低人工标注成本。针对…...

windows第二十章 单文档应用程序

文章目录 单文档定义新建一个单文档应用程序单文档应用程序组成&#xff1a;APP应用程序类框架类&#xff08;窗口类&#xff09;视图类&#xff08;窗口类&#xff0c;属于框架的子窗口&#xff09;文档类&#xff08;对数据进行保存读取操作&#xff09; 直接用向导创建单文档…...

eBay多账号安全运营技术体系:从环境隔离到智能风控的工程化实践

一、多账号运营风险模型解析 &#xff08;技术化重构关联检测机制&#xff09; 环境指纹维度&#xff1a; 浏览器指纹参数&#xff1a;Canvas/WebGL渲染特征&#xff08;差异度要求≥98%&#xff09; 设备指纹参数&#xff1a;GPU型号/声卡特征&#xff08;识别准确率92%&…...

《Python Web网站部署应知应会》No4:基于Flask的调用AI大模型的高性能博客网站的设计思路和实战(上)

基于Flask的调用AI大模型的高性能博客网站的设计思路和实战&#xff08;上&#xff09; 摘要 本文详细探讨了一个基于Flask框架的高性能博客系统的设计与实现&#xff0c;该系统集成了本地AI大模型生成内容的功能。我们重点关注如何在高并发、高负载状态下保持系统的高性能和…...

vulnhub-Node1

一、信息收集 1、扫靶机ip arp-scan -l 2、端口扫描 淦&#xff0c;只有22端口和3000端口&#xff0c;访问一下3000端口吧&#xff0c;估计是个网页 nmap -p- -Pn -sC -sV -n 192.168.66.130PORT STATE SERVICE VERSION 22/tcp open ssh OpenSS…...

什么是 OLAP 数据库?企业如何选择适合自己的分析工具

引言&#xff1a;为什么企业需要 OLAP 数据库&#xff1f; 你是否曾经经历过这样的场景&#xff1a; 市场部门急需一份用户行为分析报告&#xff0c;数据团队告诉你&#xff1a;“数据太大了&#xff0c;报表要跑 4 个小时”&#xff1b;业务负责人在会议中提出一个临时性分析…...

计算机视觉准备八股中

一边记录一边看&#xff0c;这段实习跑路之前运行完3DGAN&#xff0c;弄完润了&#xff0c;现在开始记忆八股 1.CLIP模型的主要创新点&#xff1a; 图像和文本两种不同模态数据之间的深度融合、对比学习、自监督学习 2.等效步长是每一步操作步长的乘积 3.卷积层计算输入输出…...

电源系统的热设计与热管理--以反激式充电器为例

前言 反激电源常用于各种电子设备中&#xff0c;比如充电器、适配器等&#xff0c;它们通过变压器进行能量转换。高温环境可能对电子元件造成影响&#xff0c;特别是像MOSFET、二极管、变压器这样的关键部件&#xff0c;导致效率变低&#xff0c;甚至可能导致功能失效。还有安…...

【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft 服务器搭建,并实现远程联机,详细教程

【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft 服务器搭建&#xff0c;详细详细教程 一、 服务器介绍二、下载 Minecraft 服务端三、安装 JDK 21四、搭建服务器五、本地测试连接六、添加服务&#xff0c;并设置开机自启动 前言&#xff1a; 推荐使用云服务器部署&…...