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

进程控制的学习

目录

1.进程创建

1.1 fork函数

1.2 fork函数返回值

1.3 写时拷贝

1.4 fork 常规用法

1.5 fork 调用失败的原因

2. 进程终止

2.1 进程退出场景

2.2 进程常见退出方法

2.2.1 从main 返回

2.2.2 echo $? 查看进程退出码

2.2.2.1 我们如何得到退出码代表的含义

2.2.2.1 可以按照我们的要求去定制我们的退出结果

2.2.2.2 一旦进程出现异常,进程的退出码就没有意义了

2.2.3 exit 函数

2.2.4 _exit 函数

exit(status)  VS    _exit(status)

2.2.5 return退出

3. 进程等待

3.1 进程等待的必要性(为什么?)

3.2 进程等待是什么?

3.3 进程等待的代码

3.3.1 wait

3.3.2 waitpid

3.4 拿到对应的退出信息  status

正确的写法

进程退出码,即main返回值

无异常

异常

退出信息应该存在哪里?

3.5 阻塞等待与非阻塞等待

4. 进程程序替换

4.1 快速看程序替换的效果

4.2 替换原理   --    fork

4.3 程序替换相关接口

4.3.1 execl

4.3.1.1

4.3.1.2

4.3.1.3

4.3.2 execlp

4.3.3  execv

4.3.4  execvp

4.3.5  execvpe

新增式导入

1.直接putenv

2. exec*p,put();environ;


1.进程创建

1.1 fork函数

fork 从已经存在的进程中创建一个新进程,新进程为子进程原进程为父进程

返回值:子进程中返回 0 ,父进程返回子进程 id ,出错返回 -1

进程调用fork,当控制转移到内核中的fork代码后,内核会:

1)分配新的内存块和内核数据结构给子进程

2)将父进程部分数据内容拷贝至子进程

3)添加子进程到系统进程列表当中

4)fork返回,开始调度器调度

fork之前父进程独立执行,fork之后父子两个执行流分别执行

fork之后谁先调度完由调度器决定

1.2 fork函数返回值

子进程返回0

父进程返回的是子进程的pid

1.3 写时拷贝

父子进程代码共享,父子在不写入时,数据也是共享的

当一方试图写入时,就用写时拷贝的方式各自一份副本

因为有写时拷贝,所以父子进程得以彻底分离,完成了进程独立性

当我们创建子进程时,OS除了给我们创建子进程之外,基本上会把我们页表的项目都改成只读的。拿到虚拟地址,OS可以知道我们是代码段还是数据段。我们修改写入时,发现是数据段是只读的,OS就会出错,让os知道我们在访问只读的数据区,就会触发写实拷贝

写实拷贝是最精细的内存控制

减少创建时间

减少内存浪费

1.4 fork 常规用法

1)一个父进程希望复制自己使父子进程执行不同的代码段

eg:父进程等待客户端请求,生成子进程来处理请求

2)一个进程要执行一个不同的程序

eg:子进程从fork返回后,调用exec函数

1.5 fork 调用失败的原因

1)系统中有太多的进程

2)实际客户的进程数超过了限制

2. 进程终止

进程终止的本质是释放系统资源,就是释放进程申请的相关内核数据结构和对应的数据和代码

2.1 进程退出场景

1)代码运行完毕,结果正确         

2)代码运行完毕,结果不正确 

3)代码异常终止

2.2 进程常见退出方法

2.2.1 从main 返回

int main();

main函数的返回值通常表明我们程序的执行情况

而这里的情况有两种

1)代码运行完毕,结果正确          return 0

2)代码运行完毕,结果不正确       return !0  (1,2,3...)--> 在计算机上用不同的值表明不同的                                                                                                      出错原因

返回值是通过寄存器完成的

2.2.2 echo $? 查看进程退出码

./code   是一个进程 父进程为bash

父进程bash要获得子进程退出的退出码

echo $?   打印最近一个程序(进程)退出时的退出码

main函数的返回值我们称之为进程的退出码

进程的退出码是要写到进程的task_struct内部的,task_struct里面保存的是进程的所有属性信息

2.2.2.1 我们如何得到退出码代表的含义

我们这里要实现错误码就是对应的错误描述

因为我们没有这个文件/目录,所有打开失败,就是2

2)

根据退出码来判断当前程序的执行结果

运行结果是否正确由我们进程的退出码决定,0代表正确,非0有不同的退出错误原因

2.2.2.1 可以按照我们的要求去定制我们的退出结果

2.2.2.2 一旦进程出现异常,进程的退出码就没有意义了

进程的退出码不是 66 

一旦进程出现异常,进程的退出码就没有意义了

进程一旦出现异常,一般是进程收到了信号

main函数结束,表示进程结束

2.2.3 exit 函数

1)

(忘记写头文件了)

2)

在任何地方调用exit,表示进程结束,并且返回子进程的退出码给父进程bash

一旦调用exit,程序立马结束,函数后续代码不执行,进程直接退出

2.2.4 _exit 函数

谁调用我们就退出谁

exit(status)  VS    _exit(status)

是我们C语言的      是系统的

如果进程退出的时候, exit() ,进程退出的时候,会进行缓冲区的刷新

如果进程退出的时候,_exit() ,进程退出的时候,不会进行缓冲区的刷新

库函数和系统调用是上下层关系

exit底层封装了_exit

本来就是系统调用

底层调用了_exit

所以我们之前谈论的缓冲区一定不是操作系统内部的缓冲区,它应该是在库缓冲区(C语言·提供的缓冲区)

2.2.5 return退出

return退出是一种更常见的退出进程的方法。

执行 return n 等同于执行  exit(n),因为调用 main 的运行时函数会将 main 的返回值当作 exit 的参数

进程退出的具体做法

1)main 函数里 return

2)exit(status)

             控制进程的退出码

3. 进程等待

3.1 进程等待的必要性(为什么?)

1)子进程退出,父进程不管,就可能会造成僵尸进程的问题,进而造成内存泄漏

2)进程一旦变成僵尸状态,kill-9 也没有办法,谁也没有办法杀死一个已经死去的进程

3)我们需要知道父进程派给子进程的任务完成得如何

      子进程运行完成,结果正确还是不正确,是否正常退出

4)父进程通过进程等待得方式,回收子进程资源,获取子进程退出信息

(通过等待来解决僵尸内存泄漏问题)

3.2 进程等待是什么?

父进程创建子进程,必须通过相关的接口来等待子进程

这种用wait或waitpid来等待子进程的方式就叫作进程等待

3.3 进程等待的代码

3.3.1 wait

wait 这个接口是等待任意一个退出的进程

等待成功返回的是目标进程的pid

等待失败返回-1

3.3.2 waitpid

等待成功返回的是目标进程的pid

等待失败返回-1

3.4 拿到对应的退出信息  status

wait和waitpid都有一个status参数,这个参数是一个输出型参数,由操作系统填充

如果传递NULL,表示不关心进程的退出状态信息

否则,OS会根据该参数,将子进程的退出信息反馈给父进程

status不能简单地当作整型来看待,当作位图来看待

status 并不是直接一个整数,是被划分成若干区域的

int 整型变量32个bit位,高16位我们不考虑,低16位高8位是退出状态

我们刚刚写的1就是00000001

但是后面还有八位,就是0000000100000000,就是2^8,256

我们要拿到正确的就要右移8位,踢掉低8位

正确的写法

父进程是无法拿到子进程的退出信息的,子进程退出信息是会修改的,定义在全局不能够实现,拿到子进程的退出信息必须通过系统调用

进程退出码,即main返回值

1)运行完毕,结果正确

2)运行完毕,结果不正确

3)代码异常终止

                  status

代码异常终止,保存异常时对应的信号编号

没有异常?

1.低7个bit位,0

2.一旦低7个bit位 !0,异常退出,退出码无意义

无异常

异常

1)

2)

怎么做到的?

退出信息应该存在哪里?

3.5 阻塞等待与非阻塞等待

options默认为0,表示阻塞等待

非阻塞轮询

非阻塞的效率往往要高一点

阻塞等待

定义:当一个操作需要等待某个条件完成才能继续执行时,如果当前线程被挂起,无法执行其他               任务,这种状态就称为阻塞

特点:在阻塞状态下,程序会一直等待,直到等待的条件满足,操作完成并返回结果后,才能继               续执行后续任务

非阻塞等待

定义:非阻塞是指即使某个操作尚未完成,当前线程也不会被挂起,可以继续执行其他任务

特点:在非阻塞模式下,程序不会等待某个操作的完成,而是会立即返回一个结果或者状态,表

           明该操作正在进行中或者已经失败

           适用于需要同时处理多个任务或提高资源利用率的场景

           可以提高整体执行效率

对比

阻塞等待时,线程被挂起;非阻塞等待时,线程继续执行其他任务

阻塞等待可能导致资源闲置;非阻塞等待可以提高资源利用率

4. 进程程序替换

4.1 快速看程序替换的效果

在程序替换的过程中并没有创建新的进程,只是把当前进程的代码和数据用新的程序的代码和数据进行替换

1)一旦替换成功,就去执行新代码了,原始代码的后半部分已经不存在了,是不会去执行的

前半部分是我们的printf,后半部分就是ls的结果

这个指令可以跑系统的命令

整个替换过程只替换当前的代码和数据

(默认是覆盖掉的)

把我们要替换的对应的指令所对应的代码和数据覆盖式地替换到我们当前的代码和数据

2)exec系列的函数,只有失败返回值没有成功返回值

exec系列的函数不用做返回值判断,只要返回就是失败

替换失败我们设置为1

4.2 替换原理   --    fork

用fork创建子进程后执行的是和父进程相同的程序,子进程往往要调用一种exec函数去执行另一个程序,当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行

调用exec并不创建新进程,所以调用exec前后该进程的id不会改变

4.3 程序替换相关接口

4.3.1 execl

4.3.1.1

我们可以创建一个子进程,让子进程执行程序的替换不影响父进程的执行

进程具有独立性

数据代码发生写时拷贝

4.3.1.2

现在我们来实现替换我们自己写的程序

我们今天就想要用我们的C程序来把other程序调起来

4.3.1.3

验证程序替换不会创建新的进程

4.3.2 execlp

4.3.3  execv

4.3.4  execvp

4.3.5  execvpe

要求被替换的子进程使用全新的env表

而我们如果要新增子进程?方法(把环境变量传给子进程;新增式导入)

新增式导入
1.直接putenv

谁调用它就在谁那里创建环境变量

2. exec*p,put();environ;

相关文章:

进程控制的学习

目录 1.进程创建 1.1 fork函数 1.2 fork函数返回值 1.3 写时拷贝 1.4 fork 常规用法 1.5 fork 调用失败的原因 2. 进程终止 2.1 进程退出场景 2.2 进程常见退出方法 2.2.1 从main 返回 2.2.2 echo $? 查看进程退出码 2.2.2.1 我们如何得到退出码代表的含…...

一文讲解Java中的接口和抽象类

抽象类和接口有什么区别? 一个类只能继承一个抽象类;但一个类可以实现多个接口。所以我们在新建线程类的时候,一般推荐使用Runnable接口的方式,这样线程类还可以继承其他类,而不单单是Thread类;抽象类符合…...

Vue 3 30天精进之旅:Day 05 - 事件处理

引言 在前几天的学习中,我们探讨了Vue实例、计算属性和侦听器。这些概念为我们搭建了Vue应用的基础。今天,我们将专注于事件处理,这是交互式Web应用的核心部分。通过学习如何在Vue中处理事件,你将能够更好地与用户进行交互&#…...

STM32完全学习——RT-thread在STM32F407上移植

一、写在前面 关于源码的下载,以及在KEIL工程里面添加操作系统的源代码,这里就不再赘述了。需要注意的是RT-thread默认里面是会使用串口的,因此需要额外的进行串口的初始化,有些人可能会问,为什么不直接使用CubMAX直接…...

Shodan Dorks安装指南,通过Shodan搜索漏洞

Shodan Dorks是一种基于Shodan的工具,不知道Shodan是什么的不必阅读下面的内容。简单的说就是,利用预定义的查询(dorks),通过Shodan轻松搜索漏洞和机密信息。 推荐渗透测试人员自行测试。 安装方法: 1.确…...

poi在word中打开本地文件

poi版本 5.2.0 方法1:使用XWPFFieldRun(推荐) 比如打开当前相对路径的aaaaa.docx XWPFFieldRun run paragraph.createFieldRun();CTRPr ctrPr run.getCTR().addNewRPr();CTFonts font ctrPr.addNewRFonts();// 设置字体font.setAscii(&quo…...

Linux查看服务器的内外网地址

目录: 1、内网地址2、外网地址3、ping时显示地址与真实不一致 1、内网地址 ifconfig2、外网地址 curl ifconfig.me3、ping时显示地址与真实不一致 原因是dns缓存导致的,ping这种方法也是不准确的,有弊端不建议使用,只适用于测试…...

OAuth1和OAuth2授权协议

OAuth 1 授权协议 1. 概述 OAuth1 是 OAuth 标准的第一个正式版本,它通过 签名和令牌 的方式,实现用户授权第三方访问其资源的功能。在 OAuth1 中,安全性依赖于签名机制,无需传递用户密码。 2. 核心特性 使用 签名&#xff08…...

DeepSeek学术题目选择效果怎么样?

论文选题 一篇出色的论文背后,必定有一个“智慧的选题”在撑腰。选题足够好文章就能顺利登上高水平期刊;选题不行再精彩的写作也只能“当花瓶”。然而许多宝子们常常忽视这个环节,把大量时间花在写作上,选题时却像抓阄一样随便挑一…...

数据结构(一)顺序表和链表

目录 1. 时间复杂度和空间复杂度 2. 顺序表 3. 链表 1. 时间复杂度和空间复杂度 如何估算一个算法的效率高低一般就是使用到时间复杂度和空间复杂度; 时间复杂度是评价一个算法运行快慢的, 而空间复杂度是算法额外需要空间大小. 1.1 时间复杂度的计算: 准确来说时间复杂度是…...

单相可控整流电路——单相桥式全控整流电路

以下是关于单相桥式整流电路的介绍: 电路构成(带阻性负载的工作情况) - 二极管:是电路0的核心元件,通常采用四个同型号或根据需求选择不同型号的二极管,如1N4001、1N4007等,如图Vt1和Vt4是一对…...

DeepSeek-R1:性能对标 OpenAI,开源助力 AI 生态发展

DeepSeek-R1:性能对标 OpenAI,开源助力 AI 生态发展 在人工智能领域,大模型的竞争一直备受关注。最近,DeepSeek 团队发布了 DeepSeek-R1 模型,并开源了模型权重,这一举动无疑为 AI 领域带来了新的活力。今…...

【Maui】提示消息的扩展

文章目录 前言一、问题描述二、解决方案三、软件开发(源码)3.1 消息扩展库3.2 消息提示框使用3.3 错误消息提示使用3.4 问题选择框使用 四、项目展示 前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移…...

001 mybatis入门

文章目录 mybatis是什么ORM是什么ORM框架和MyBatis的区别#{}和${}的区别编码流程UserDaoImpl.javaUserDao.javaUser.javadb.propertiesSqlMapConfig.xmlUserMapper.xmlMybatisTest.javapom.xmluser.sql 表现层 SpringMVC 业务层 Spring 持久层 Mybatis https://mybatis.org/myb…...

tomcat的accept-count、max-connections、max-threads三个参数的含义

tomcat的accept-count、max-connections、max-threads三个参数的含义 tomcat的accept-count、max-connections、max-threads三个参数的含义 max-connections:最大连接数 最大连接数是指,同一时刻,能够连接的最大请求数 需要注意的是&#x…...

8.2 从看图识字到智能解读:GPT-4 with Vision 开启多模态 AI 新纪元

从看图识字到智能解读:GPT-4 with Vision 开启多模态 AI 新纪元 引言:AI 的多模态跃迁 随着人工智能技术的快速发展,我们正迈入一个新的智能交互时代。传统的 AI 模型主要聚焦于文本处理,而多模态 AI 模型如 GPT-4 with Vision(GPT-4V) 则能够同时处理图像和文本。GPT-4…...

.strip()用法

.strip("") 是 Python 字符串方法 strip() 的一个用法,它会去除字符串两端指定字符集中的字符。 基本语法: string.strip([chars])string: 这是你要操作的字符串。chars: 可选参数,表示你想要去除的字符集(默认为空格…...

蓝桥杯例题三

无论前方困难如何重重,我们都要坚定信念,勇往直前。面对挑战和困境,不要退缩,不要放弃,要坚持走下去。当我们感到疲惫时,要告诉自己:“我可以,我一定行!”相信自己的实力…...

关于pygame窗口输入法状态异常切换现象的分析报告

一、问题描述 1.1 需求说明 我们准备使用Pygame开发一个键盘输入测试程序,需要确保输入时窗口始终处于英文输入模式,也就是禁止中文输入; 1.2 现象描述 控制台种显示,程序在初始化时,会有两次IMM状态切换操作&…...

【JavaEE进阶】应用分层

目录 🎋序言 🍃什么是应用分层 🎍为什么需要应用分层 🍀如何分层(三层架构) 🎄MVC和三层架构的区别和联系 🌳什么是高内聚低耦合 🎋序言 通过上⾯的练习,我们学习了SpringMVC简单功能的开…...

两数相加:链表操作的基础与扩展

两数相加:链表操作的基础与扩展 引言 链表(Linked List)是一种灵活且高效的数据结构,特别适用于动态增删操作。无论是初学者还是资深程序员,链表的基本操作都是算法学习中的重要一环。而 “两数相加” 问题则是链表操…...

ChatGPT从数据分析到内容写作建议相关的46个提示词分享!

在当今快节奏的学术环境中,研究人员面临着海量的信息和复杂的研究任务。幸运的是,随着人工智能技术的发展,像ChatGPT这样的先进工具为科研人员提供了强大的支持。今天就让我们一起探索如何利用ChatGPT提升研究效率进一步优化研究流程。 ChatG…...

解析“in the wild”——编程和生活中的俚语妙用

解析“in the wild”——编程和生活中的俚语妙用 看下面的技术文章中遇到 in the wild这个词,想要研究一下,遂产生此文。 Are there ever pointers to pointers to pointers? There is an old programming joke which says you can rate C programmers…...

rocketmq原理源码分析之控制器模式- dledger

简介 RocketMQ 4.5 版本之前,RocketMQ 的broker是 Master/Slave部署架构,一组 broker 有一个 Master ,有0到若干Slave,Slave复制Master消息存储,随时替代下线的Master。Master/Slave部署架构提供一定的高可用性&#x…...

Hello Moto

“Hello Moto” 是摩托罗拉(Motorola)的一句经典广告口号,用于推广其品牌和产品,特别是在手机领域。以下是它的含义和背景: 1. 品牌宣传的标志性语句 直白含义:简单地向摩托罗拉打招呼(“Hell…...

存储基础 -- SCSI命令格式与使用场景

SCSI命令格式与使用场景 1. SCSI命令描述符块(CDB) 1.1 CDB基本概念 SCSI命令通过**命令描述符块(CDB, Command Descriptor Block)**表示。 CDB长度:SCSI命令根据使用场景有不同长度的CDB,常见的有6字节…...

ceph基本概念,架构,部署(一)

一、分布式存储概述 1.存储分类 存储分为封闭系统的存储和开放系统的存储,而对于开放系统的存储又被分为内置存储和外挂存储。 外挂存储又被细分为直连式存储(DAS)和网络存储(FAS),而网络存储又被细分网络接入存储(NAS)和存储区域网络(SAN)等。 DAS(D…...

CNN-GRU卷积门控循环单元时间序列预测(Matlab完整源码和数据)

CNN-GRU卷积门控循环单元时间序列预测(Matlab完整源码和数据) 目录 CNN-GRU卷积门控循环单元时间序列预测(Matlab完整源码和数据)预测效果基本介绍CNN-GRU卷积门控循环单元时间序列预测一、引言1.1、研究背景与意义1.2、研究现状1…...

Ubuntu 顶部状态栏 配置,gnu扩展程序

顶部状态栏 默认没有配置、隐藏的地方 安装使用Hide Top Bar 或Just Perfection等进行配置 1 安装 sudo apt install gnome-shell-extension-manager2 打开 安装的“扩展管理器” 3. 对顶部状态栏进行配置 使用Hide Top Bar 智能隐藏,或者使用Just Perfection 直…...

React应用深度优化与调试实战指南

一、渲染性能优化进阶 1.1 精细化渲染控制 typescript 复制 // components/HeavyComponent.tsx import React, { memo, useMemo } from react;interface Item {id: string;complexData: {// 复杂嵌套结构}; }const HeavyComponent memo(({ items }: { items: Item[] }) &g…...

Spring中的事件和事件监听器是如何工作的?

目录 一、事件(Event) 二、事件发布器(Event Publisher) 三、事件监听器(Event Listener) 四、使用场景 五、总结 以下是关于Spring中的事件和事件监听器的介绍与使用说明,结合了使用场景&…...

Vue.js组件开发-实现多个文件附件压缩下载

在 Vue 项目中实现多个附件压缩下载,可以借助 jszip 库来创建压缩文件,以及 file-saver 库来保存生成的压缩文件。 步骤 1:安装依赖 首先,在 Vue 项目中安装 jszip 和 file-saver: npm install jszip file-saver步骤…...

基于dlib/face recognition人脸识别推拉流实现

目录 一.环境搭建 二.推拉流代码 三.人脸检测推拉流 一.环境搭建 1.下载RTSP服务器MediaMTX与FFmpeg FFmpeg是一款功能强大的开源多媒体处理工具,而MediaMTX则是一个轻量级的流媒体服务器。两者结合,可以实现将本地视频或者实时摄像头画面推送到RTSP流,从而实现视频…...

qt QNetworkRequest详解

1、概述 QNetworkRequest是Qt网络模块中的一个核心类,专门用于处理网络请求。它封装了网络请求的所有关键信息,包括请求的URL、HTTP头部信息等,使得开发者能够方便地在Qt应用程序中执行网络操作,如文件下载、网页内容获取等。QNe…...

uvm timeout的哪些事

如下图所示,设置timeout并未生效,原因多了一个空格,坑 进一步分析,默认是overidable的 是否加括号呢,如下所示,这两个造型都可以,中间有空格也行 那么,我加上单位可以吗,…...

JavaScript赋能智能网页设计

构建AI驱动的实时风格迁移系统 案例概述 本案例将实现一个基于深度学习的实时图像风格迁移系统,通过浏览器端神经网络推理实现以下高级特性: WebAssembly加速的ONNX模型推理 WebGL Shader实现的风格混合算法 WebRTC实时视频流处理 基于Web Workers的…...

全面了解 Web3 AIGC 和 AI Agent 的创新先锋 MelodAI

不管是在传统领域还是 Crypto,AI 都是公认的最有前景的赛道。随着数字内容需求的爆炸式增长和技术的快速迭代,Web3 AIGC(AI生成内容)和 AI Agent(人工智能代理)正成为两大关键赛道。 AIGC 通过 AI 技术生成…...

leetcode_链表 234.回文链表

234.回文链表 给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是, 返回 true ; 否则, 返回false。思路: 找到中间节点(快慢指针法)反转后半部分的链表比较前半部分和后半部分链表 # Definition for singly-linked list. # class List…...

cloc下载和使用

cloc(Count Lines of Code)是一个跨平台的命令行工具,用于计算代码行数。以下是下载和使用 cloc 的步骤: 下载 cloc 对于 Windows 用户: 访问 cloc 的 GitHub 仓库:https://github.com/AlDanial/cloc在 …...

在 Windows 系统上,将 Ubuntu 从 C 盘 迁移到 D 盘

在 Windows 系统上,如果你使用的是 WSL(Windows Subsystem for Linux)并安装了 Ubuntu,你可以将 Ubuntu 从 C 盘 迁移到 D 盘。迁移过程涉及导出当前的 Ubuntu 发行版,然后将其导入到 D 盘的目标目录。以下是详细的步骤…...

【Redis】Redis入门以及什么是分布式系统{Redis引入+分布式系统介绍}

文章目录 介绍redis的引入 分布式系统单机架构应用服务和数据库服务分离【负载均衡】引入更多的应用服务器节点 单机架构 分布式是什么 数据库分离和负载均衡 理解负载均衡 数据库读写分离 引入缓存 数据库分库分表 引入微服务 介绍 The open source, in-memory data store us…...

wow-agent---task4 MetaGPT初体验

先说坑: 1.使用git clone模式安装metagpt 2.模型尽量使用在线模型或本地高参数模型。 这里使用python3.10.11调试成功 一,安装 安装 | MetaGPT,参考这里的以开发模型进行安装 git clone https://github.com/geekan/MetaGPT.git cd /you…...

Leetcode::3432. 统计元素和差值为偶数的分区方案

3432. 统计元素和差值为偶数的分区方案 已解答 简单 相关企业 提示 给你一个长度为 n 的整数数组 nums 。 分区 是指将数组按照下标 i &#xff08;0 < i < n - 1&#xff09;划分成两个 非空 子数组&#xff0c;其中&#xff1a; 左子数组包含区间 [0, i] 内的所…...

linux如何修改密码,要在CentOS 7系统中修改密码

要在CentOS 7系统中修改密码&#xff0c;你可以按照以下步骤操作&#xff1a; 步骤 1: 登录到系统 在登录提示符 localhost login: 后输入你的用户名。输入密码并按回车键。 步骤 2: 修改密码 登录后&#xff0c;使用 passwd 命令来修改密码&#xff1a; passwd 系统会提…...

GIS与相关专业软件汇总

闲来无事突然想整理一下看看 GIS及相关领域 究竟有多少软件或者工具包等。 我询问了几个AI工具并汇总了一个软件汇总&#xff0c;不搜不知道&#xff0c;一搜吓一跳&#xff0c;搜索出来了大量的软件&#xff0c;大部分软件或者工具包都没有见过&#xff0c;不知大家还有没有要…...

云计算架构学习之LNMP架构部署、架构拆分、负载均衡-会话保持

一.LNMP架构部署 1.1. LNMP服务搭建 1.磁盘信息 2.内存 3.负载信息 4.Nginx你们公司都用来干嘛 5.文件句柄(文件描述符 打开文件最大数量) 6.你处理过系统中的漏洞吗 SSH漏洞 7.你写过什么shell脚本 8.监控通过什么告警 zabbix 具体监控哪些内容 9.mysql redis查询 你好H…...

mamba论文学习

rnn 1986 训练速度慢 testing很快 但是很快就忘了 lstm 1997 训练速度慢 testing很快 但是也会忘&#xff08;序列很长的时候&#xff09; GRU实在lstm的基础上改进&#xff0c;改变了一些门 transformer2017 训练很快&#xff0c;testing慢些&#xff0c;时间复杂度高&am…...

uva 1354 Mobile Computing

原题&#xff1a; 房间中有一个天平&#xff0c;房间的宽度为r&#xff0c;有s个砝码&#xff0c;每个砝码的重量是 w i w_i wi​。设计一个尽量宽&#xff0c;但是宽度不能超过r的天平&#xff0c;挂住所有砝码。天平全部由长度为1的木棍组成&#xff0c;木棍的每一端要么挂一…...

理解C++中的右值引用

右值引用&#xff0c;顾名思义&#xff0c;就是对一个右值进行引用&#xff0c;或者说给右值一个别名。右值引用的规则和左值一用一模一样&#xff0c;都是对一个值或者对象起个别名。 1. 右值引用和左值引用一样&#xff0c;在定义的同时必须立即赋值&#xff0c;如果不立即赋…...

约数个数(简单)

给定 nn 个正整数 aiai&#xff0c;请你输出这些数的乘积的约数个数&#xff0c;答案对 10971097 取模。 输入格式 第一行包含整数 nn。 接下来 nn 行&#xff0c;每行包含一个整数 aiai。 输出格式 输出一个整数&#xff0c;表示所给正整数的乘积的约数个数&#xff0c;答…...