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

【Linux笔记】进程管理章节笔记

一、进程与线程的概念

1、进程

1)概念

进程是程序的执行实例,拥有独立的资源(如内存、文件描述符等)。每个进程在创建时会被分配唯一的进程ID,即为PID,也叫进程编号

2)特点

  • 资源隔离:进程拥有独立的虚拟地址空间。

  • 独立性:进程崩溃通常不会直接影响其他进程,代表了其高隔离性的特点。

  • 通信成本高:进程间通信(IPC)需通过管道、共享内存、信号、消息队列等机制。

  • 创建开销大fork()系统调用会复制父进程的上下文。

     

2、线程

1)概念

线程是进程内的执行单元,共享进程的资源(如内存、文件句柄),但拥有独立的栈和寄存器上下文。

2)特点

  • 资源共享:线程直接共享进程的内存、全局变量等,通信更高效。

  • 轻量级:线程创建和切换的开销远小于进程。

  • 同步需求:共享资源需通过互斥锁(mutex)、信号量(semaphore) 等机制避免竞态条件。

  • 风险:一个线程崩溃可能导致整个进程终止(共享地址空间)。

3、进程和线程之间的联系与对比

1)联系:

同一进程内的线程共享同一个进程ID(PID),但每个线程有唯一的线程ID(TID)

2)对比:

特性进程线程
资源隔离完全独立(虚拟地址空间、文件描述符等)共享进程资源(内存、文件等)
创建开销较高(需复制内存、文件描述符等)较低(共享资源,仅分配栈和寄存器)
通信方式IPC(管道、共享内存等)直接读写共享内存(需同步)
容错性一个进程崩溃不影响其他进程一个线程崩溃可能导致整个进程终止
典型应用场景需要高隔离性的任务高并发、资源共享的任务

二、进程的各种状态

在Linux系统中,进程的生命周期由一系列状态组成,这些状态反映了进程在操作系统调度管理下的行为。

Linux内核通过struct task_struct(在include/linux/sched.h里)管理进程状态。进程状态用以下来表示:

  • R状态——TASK_RUNNING——运行/就绪状态

    • 进程正在CPU上执行  处于就绪队列中等待被调度。

    • 如:一个正在执行计算的进程,或等待CPU时间片分配的进程。

  • S状态——TASK_INTERRUPTIBLE——可中断睡眠

    • 进程因等待某个事件(如I/O操作完成、信号到达)而暂停执行。

    • 可以被信号(如SIGKILL)或事件唤醒。

    • 如:进程调用read()等待用户输入时进入此状态。

  • D状态——TASK_UNINTERRUPTIBLE——不可中断睡眠

    • 进程正在等待硬件资源(如磁盘I/O),不能被信号中断

    • 通常出现在关键内核操作中,需等待操作完成。

    • 如:进程等待磁盘写入完成时进入此状态(常见于D状态)。

  • T状态——TASK_STOPPED——停止状态

    • 进程被外部信号(如SIGSTOP)暂停执行,需通过信号(如SIGCONT)恢复。

    • 如:调试器暂停程序执行时,进程进入此状态。

  • Z状态——TASK_ZOMBIE——僵尸状态

    • 进程已终止,但其退出状态尚未被父进程回收(通过wait()系统调用)。

    • 保留进程描述符(PID)直到父进程处理。

    • 如:父进程未及时回收子进程时,子进程变为僵尸。

  • EXIT_DEAD——终止状态

    • 进程最终状态,表示资源已完全释放(短暂存在,用户通常不可见)。

三、查看进程状态的相关命令

查看进程状态的命令有(常用):ps、ps ax、ps aux、pgrep、pidof、top

1、ps相关命令(ps、ps ax、ps aux

ps命令的常用参数表

参数说明示例
基础选项
a显示所有用户的进程(包括其他用户)。ps a
x显示无控制终端的进程(如守护进程)。ps x
ax组合使用:显示所有进程(包括无终端的进程)。ps ax
信息控制
-o <字段>自定义输出字段(支持 piduser%cpucommttystat 等)。ps axo pid,user,comm,%cpu
u显示详细资源占用(用户、CPU、内存等,类似 ps aux)。ps aux
-e显示所有进程(等效于 ax,但属于Unix风格参数)。ps -e
筛选过滤
-p <PID>显示指定PID的进程。ps ax -p 1234
-U <用户>显示指定用户的进程。ps ax -U root
-C <命令>按进程名过滤(支持部分匹配)。ps ax -C nginx
--ppid <PID>显示父进程为指定PID的子进程。ps ax --ppid 1
格式化输出
--sort按字段排序(+%cpu 升序,-%mem 降序)。ps ax --sort=-%cpu
-H显示进程层级关系(树形结构)。ps axH
-f显示完整格式(包括命令行参数)。ps axf
线程查看
-L显示线程(LWP列)。ps axL
-T显示线程(SPID列)。ps axT

 ps ax的默认输出列

列名说明示例
PID进程的唯一标识符(Process ID)。1234
TTY进程关联的终端设备:
?:无控制终端(如守护进程)。
pts/0:虚拟终端或SSH会话。
? 或 pts/0
STAT进程状态(由多个字符组成,见下方详细说明)。SsR+D
TIME进程累计占用CPU的时间(格式为分钟:秒)。00:0110:23
COMMAND启动进程的命令名称或命令行参数:
[] 表示内核线程。
/usr/bin/nginx[kworker]

 ps aux的默认输出列

列名说明示例
USER进程的所有者(用户账号)。rootnginx
PID进程的唯一标识符(Process ID)。1234
%CPU进程占用CPU的百分比(单位:%),基于最近一次刷新周期内的使用情况。0.599.0
%MEM进程占用物理内存的百分比(单位:%)。2.315.8
VSZ虚拟内存大小(Virtual Memory Size,单位:KB),即进程申请的虚拟内存总量。123456(约123MB)
RSS实际使用的物理内存(Resident Set Size,单位:KB),即进程当前占用的非交换内存。65432(约65MB)
TTY进程关联的终端设备:
?:无控制终端(如守护进程)。
pts/0:虚拟终端或SSH会话。
? 或 pts/0
STAT进程状态(由多个字符组成,见下方详细说明)。SsR+Dl
START进程启动时间(格式为小时:分钟或日期,取决于运行时长)。10:00Jan01
TIME进程累计占用CPU的时间(格式为分钟:秒)。00:01120:45
COMMAND启动进程的命令名称或命令行参数:
[] 表示内核线程。
/usr/bin/nginx[kworker]

2、pgrep

pgrep 命令核心作用

pgrep 用于根据 进程名、用户、组等条件快速查找进程PID,默认仅输出匹配的进程ID(PID)。
ps/grep组合相比,pgrep更高效且语法简洁。 

pgrep 默认输出信息

输出内容说明示例
PID匹配条件的进程ID(每行一个)。1234
5678

 pgrep的显示参数

参数说明输出新增内容示例
基础过滤
-u <用户>按用户过滤进程(用户名或UID)。无,仅PIDpgrep -u root
-G <组>按组过滤进程(组名或GID)。无,仅PIDpgrep -G www-data
-x精确匹配进程名(需全名匹配)。无,仅PIDpgrep -x sshd
输出控制
-l显示进程名(与PID一同输出)。进程名1234: nginx
-a显示完整命令行(需结合-l)。完整命令1234: nginx: worker process
-c输出匹配进程的数量(计数)。数字3
-d <分隔符>自定义PID分隔符(默认为换行)。无,格式变化pgrep -d ',' nginx → 1234,5678
信号与状态
-f匹配完整命令行(而非仅进程名)。无,过滤条件变化pgrep -f "nginx -g"
-n仅显示最新(最近启动)的进程PID。无,仅PIDpgrep -n nginx
-o仅显示最旧(最早启动)的进程PID。无,仅PIDpgrep -o nginx

3、pidof

命令:

pidof 进程名称示例
pidof nginx      # 输出:1234 5678 (多个nginx进程的PID)
pidof sshd       # 输出:8910       (sshd守护进程的PID)

 显示单个PID(-s)

pidof -s <进程名>  # 仅返回一个PID(通常是最新的进程)示例
pidof -s python3  # 输出:9999 (最近启动的Python3进程PID)

常用参数表 

参数说明
-s仅返回一个PID(单实例进程适用)。
-c仅返回与当前运行环境相同根目录(chroot)下的进程PID。
-x同时匹配执行该脚本的Shell进程PID(用于脚本文件)。
-o <PID>排除指定PID的进程(可多次使用,如 -o 1234 -o 5678)。
-d <分隔符>自定义PID分隔符(默认是空格)。

4、top

top 是 Linux 系统中用于 实时监控系统资源使用情况和进程状态 的核心命令行工具。它能动态显示 CPU、内存、交换分区、进程负载等关键指标,帮助用户快速定位性能瓶颈。

1)top 的核心功能

  1. 实时刷新:默认每 3 秒更新一次数据(可配置)。

  2. 多维度展示

    • 系统资源概览:CPU、内存、负载、运行时间等。

    • 进程列表:按资源占用排序的进程详情(PID、用户、CPU、内存等)。

  3. 交互式操作:支持动态排序、筛选、终止进程等操作。

2)top显示内容详解

显示内容分为上下部分;上部分:

  • 第一行:系统时间、运行时长、登录用户数、平均负载。

  • 第二行:进程总数及状态统计(运行、睡眠、停止、僵尸)。

  • 第三行:CPU 使用率(用户态 us、内核态 sy、空闲 id、等待I/O wa 等)。

  • 第四行:物理内存使用情况(总量、空闲、已用、缓存)。

  • 第五行:交换分区使用情况。

下部分:

关键字段:

  • PID:进程ID。

  • USER:进程所有者。

  • %CPU:CPU 占用百分比。

  • %MEM:物理内存占用百分比。

  • VIRT:虚拟内存总量(KB)。

  • RES:实际物理内存占用(KB)。

  • SHR:共享内存大小(KB)。

  • S:进程状态(R=运行, S=睡眠, Z=僵尸等)。

  • TIME+:累计 CPU 占用时间。

四、进程的前/后台调用

1、ctrl+z

1)概念

Ctrl+Z 是一个重要的终端快捷键,用于管理正在运行的进程。

2)Ctrl+Z 的作用

  1. 挂起前台进程
    按下 Ctrl+Z 会立即暂停当前正在终端前台运行的进程(如脚本、命令等),并将其放入后台的作业列表中。进程进入 STOPPED 状态,但并未终止。

  2. 返回终端控制权
    挂起后,终端会释放控制权,允许用户继续执行其他命令。

3)操作示例

我们先创建一个名为“test”的进程(用gedit命令创建),用来观察后续的操作

我们在进程test里随意编辑(这里用hello world来代表),来模拟用户正在操作该进程,此时如果用户想返回终端命令行时,直接ctrl+c终止进程是不会保存刚刚编辑的内容hello world的

而这时,ctrl+z就发挥作用了,我们在终端处,输入ctrl+z,就可以挂起刚刚创建的test进程

此时的进程相当于暂停状态, 编辑的内容不会消失,并且可以随时返回终端命令行进行其他的操作

输入ctrl+z后的命令如下图: 

这里的 “[1]+  已停止               gedit test” 中,

  •  “[1]” —— 为进程编号,
  • “已停止” —— 顾名思义,就是该进程已被停止(挂起)
  • “gedit test” —— 即为进程名字

被挂起后,此时若返回被挂起的进程,则会显示无响应弹窗,也证明了进程已被停止(如图)

2、jobs

1)概念

jobs 命令是 Linux/Unix 系统中用于 管理当前 Shell 会话的后台任务 的核心工具。它可以显示当前 Shell 启动的后台任务、暂停任务及其状态,是任务控制(Job Control)的关键命令。

2)操作示例

我们先用gedit创建一个名为lincoln的进程,方便我们用jobs命令来观察

gedit lincoln

接着输入jobs,查看当前shell中在后台的所有工作

jobs

 如图,显示了我们刚刚创建的进程gedit lincoln

 3、bg、fg

1)概念

bg(把后台挂起的进程运行起来):
  • 将 暂停的任务(如通过 Ctrl+Z 暂停的任务)恢复运行,并在 后台继续执行

  • 适用于需要暂时释放终端、但任务仍需继续运行的场景。

fg(把后台进程调回前台):
  • 将 后台任务 或 暂停的任务 切换到 前台运行

  • 适用于需要与任务交互的场景(如编辑文件、查看实时输出)。

2)操作示例

bg

用法

bg 1(进程编号pid)

就拿刚刚在jobs时挂起的进程gedit lincoln为例,由图可知进程gedit lincoln的进程编号为1

我们用bg把它重新运行起来,此时进程lincoln的“无响应”弹窗会消失,因为该进程已回到后台运行

fg

用法

fg 1(进程编号pid)

还是以gedit lincoln进程为例,输入fg命令,进程就被调到前台运行

五、进程的优先级

1、概念

在 Linux 系统中,进程优先级决定了进程获取 CPU 时间的顺序。优先级高的进程会更频繁地被调度执行,这对系统性能调优和资源管理至关重要。

2、优先级种类

1)概念

进程也分为“可控的”和“不可控的”,“可控”,说明进程可以被用户或管理员进行修改或手动设置,这种即为静态优先级,而“不可控”,即不能被用户或管理员进行修改等操作,由系统内核根据进程的运行状态来调整(如等待时间、CPU 使用率)优化调度公平性,避免低优先级进程长期饥饿,这种即为动态优先级

2)静态优先级的调节

用户通过 nice 或 renice 设置,范围 -20(最高)到 19(最低),能直接影响普通进程的初始调度权重。

nice值

        nice值用来调整控制进程优先级的,nice值越低(越负),优先级就越高;Nice 值范围:-20(最高优先级)到 19(最低优先级),默认值为 0

        用法

nice -n <调整值> <命令>   # 调整值为目标 Nice 值与默认值(0)的差值

        示例  

        

        解释:用指定权限-5来打开cat命令 

renice值

        renice命令可以修改进程的nice值,如renice -5 3595,其中 -5 为你想要修改的nice值为多少,后面的编号3595即为进程编号

        Tips:查看进程编号可以用监视(watch)来监控进程的pid,即可看到进程编号,也可以用vim &来查看

        

        用法

 renice -5(想要修改的nice值) 16410(进程编号)

        示例 

         我们先创建一个监控器,来监控进程相关变化

        命令代码

watch -n 1 "ps ax -o pid,comm,nice,pri | grep gedit"

        下图是一个进程的相关参数,修改前nice值为0

        

        使用renice命令后,nice值变化为-5 

3)进程状态字符解释

主要字符

字符名称说明
RRunning进程正在运行或在就绪队列中等待 CPU 分配。
SInterruptible Sleep可中断睡眠:等待事件完成(如 I/O 操作、信号)。
DUninterruptible Sleep不可中断睡眠:通常等待硬件操作(如磁盘 I/O),不能被信号中断。
ZZombie僵尸进程:进程已终止,但其退出状态未被父进程回收。
TStopped进程被作业控制信号(如 SIGSTOPSIGTSTP)暂停。
tTracing Stop进程被调试器暂停(如通过 ptrace 跟踪)。
XDead进程完全终止(极少见,通常瞬间消失)。

次要字符

字符说明
<高优先级:进程的 Nice 值为负(优先级高于默认)。
N低优先级:进程的 Nice 值为正(优先级低于默认)。
s会话领导者:进程是会话(Session)的首进程(如 Shell 进程)。
l多线程:进程是多线程的(有多个轻量级进程 LWP)。
+前台进程组:进程属于终端的前台进程组(可接收输入)。
L锁定内存:进程将部分内存锁定(如通过 mlock 避免换出)。
I空闲进程:内核线程处于空闲状态(某些系统显示为 I)。

 

 六、进程的信号

1、概念

进程信号( Process Signal )是一种软件中断机制,用于在进程之间传递异步通知。其为系统提供了一种处理异常情况、实现进程间通信的简单方式。信号可以由系统内核、其他进程或者用户手动发送给目标进程,当进程接收到信号时,会根据信号的类型执行相应的操作,如终止进程、暂停进程、忽略信号等。

2、用户能够控制的进程信号(表)

信号名称信号值默认行为典型用途可否捕获/忽略
SIGHUP1终止进程通知进程重新加载配置(如 nginx -s reload)。
SIGINT2终止进程用户按下 Ctrl+C 中断前台进程。
SIGQUIT3终止进程并生成核心转储用户按下 Ctrl+\ 强制终止并调试(生成 core dump)。
SIGKILL9强制终止进程无条件终止进程(无法被捕获或忽略)。
SIGTERM15终止进程请求进程正常退出(允许清理资源),默认的 kill 信号。
SIGSTOP17,19,23暂停进程暂停进程(不可被捕获或忽略),用户按下 Ctrl+Z(实际发送 SIGTSTP)。
SIGCONT18,25,26继续运行恢复被暂停的进程(如 bg/fg 命令)。
SIGTSTP20暂停进程用户按下 Ctrl+Z 暂停前台进程(可捕获处理)。
SIGUSR110终止进程用户自定义用途(如通知进程切换日志文件)。
SIGUSR212终止进程用户自定义用途(如通知进程更新配置)。

 

3、控制进程信号的命令

kill、killall、pkill

1)killall命令

该命令可以向内核询问一个进程存不存在,如:

killall -<信号名或值> <进程名>     # 向所有同名进程发送信号如
killall -0(信号编号) gedit(进程的名字或编号)

其中的 -0 位为信号编号,且有许多其他数字代表,但用户可以控制的常用信号只有代码这些(上面的表有详细的介绍):-1  -2  -3  -15  -9  -18  -19  -20

2)kill命令

kill可以精准的将一个进程结束

kill -<信号名或值> <PID>          # 向指定 PID 发送信号如
kill -9(信号编号) 16410(进程的名字或编号)

 我们使用kill -9来关闭无响应的test进程

 

3)pkill命令

pkill -<信号名或值> <模式>         # 按模式匹配进程并发送信号

pkill可以终止一个用户

我们先创建一个用户test来测试pkill命令,并登录上此test用户

另起一个终端命令行,输入pkill命令

pkill -9 -u test(用户名)

可以看到用户test的命令行提示 “已杀死” 

七、守护进程

1、概念

守护进程(Daemon) 是一种特殊的后台进程,通常在系统启动时自动运行,独立于控制终端,持续执行特定任务(如服务请求、系统监控等)。

2、特性(核心)

特性说明
无控制终端脱离终端运行(TTY 显示为 ?),不接收用户直接输入。
后台运行默默执行任务,不占用用户交互界面。
独立会话创建新会话(Session)并成为会话领导者(Session Leader)。
脱离父进程通过两次 fork() 脱离原进程,由 init(PID=1)接管。
固定工作目录通常将工作目录设置为根目录(/)或特定目录(如 /var/run)。
日志输出将标准输入/输出重定向到文件(如 /var/log)或 syslog

3、命令

systemctl

systemctl 是 systemd 系统和服务管理器 的核心命令,用于控制 systemd 系统(如启动服务、管理单元、查看系统状态)。
适用场景:服务管理、系统启动项控制、日志查看等。

其常用的命令总结(表)

命令作用示例
systemctl start <服务名>启动服务sudo systemctl start nginx
systemctl stop <服务名>停止服务sudo systemctl stop sshd
systemctl restart <服务名>重启服务sudo systemctl restart mysql
systemctl reload <服务名>重新加载配置(不重启服务)sudo systemctl reload nginx
systemctl status <服务名>查看服务状态systemctl status docker
systemctl enable <服务名>启用开机自启sudo systemctl enable httpd
systemctl disable <服务名>禁用开机自启sudo systemctl disable postfix
systemctl is-enabled <服务名>检查服务是否开机自启systemctl is-enabled cron
systemctl mask <服务名>禁用服务(阻止手动或自动启动)sudo systemctl mask apache2
systemctl unmask <服务名>解除禁用sudo systemctl unmask apache2

相关文章:

【Linux笔记】进程管理章节笔记

一、进程与线程的概念 1、进程 1&#xff09;概念 进程是程序的执行实例&#xff0c;拥有独立的资源&#xff08;如内存、文件描述符等&#xff09;。每个进程在创建时会被分配唯一的进程ID&#xff0c;即为PID&#xff0c;也叫进程编号。 2&#xff09;特点 资源隔离&#…...

使用Webpack搭建React项目:从零开始

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…...

使用Cusor 生成 Figma UI 设计稿

一、开发环境 系统&#xff1a;MacOS 软件版本&#xff1a; Figma&#xff08;网页或APP版&#xff09; 注&#xff1a;最好是app版&#xff0c;网页版figma 没有选项 import from manifest app下载地址&#xff1a;Figma Downloads | Web Design App for Desktops & …...

前端 vs 后端:技术分工详解——从用户界面到系统逻辑的全解析

前端&#xff08;Frontend&#xff09; 和 后端&#xff08;Backend&#xff09; 是软件开发中两个核心概念&#xff0c;分别对应用户直接交互的部分和系统背后的逻辑处理部分。它们共同构成完整的应用程序&#xff0c;但分工不同。 目录 一、前端&#xff08;Frontend&#xf…...

CentOS 7上配置SQL Server链接其他SQL Server服务器

概述 本文介绍在CentOS 7系统上运行的SQL Server如何链接访问其他SQL Server服务器的详细步骤&#xff0c;包括驱动安装、配置和连接测试。 安装必要组件 1. 安装ODBC驱动 # 安装基础ODBC组件 sudo yum install unixODBC unixODBC-devel# 添加Microsoft仓库 curl https://p…...

Scade One - 将MBD技术从少数高安全领域向更广泛的安全嵌入式软件普及

Scade One是继Scade Suite version 6自2008年起发展近20年后的首次主要改进版本。在Scade One发布的同时&#xff0c;Scade团队发布了一系列介绍Scade One的博客。本篇Scade One - Democratizing model-based development是其中的一部分。在后面的内容中&#xff0c;将复述博客…...

第十二章:容器间网络_《凤凰架构:构建可靠的大型分布式系统》

第十二章 容器间网络 一、Linux网络虚拟化基础 1. 网络命名空间&#xff08;Network Namespace&#xff09; 隔离网络栈&#xff1a;每个网络命名空间拥有独立的IP地址、路由表、防火墙规则等网络配置。实现方式&#xff1a;通过ip netns命令管理&#xff0c;容器启动时自动创…...

详解七大排序

目录 一.直接插入排序 &#xff08;1&#xff09;基本思想 &#xff08;2&#xff09;算法步骤 &#xff08;3&#xff09;代码实现 &#xff08;4&#xff09;算法特性 &#xff08;5&#xff09;算法优化 &#xff08;6&#xff09;示例演示 二.希尔排序 &#xff08…...

第八章 Python基础进阶-数据可视化(终)

此章节练习主要分为&#xff1a;折线图、地图、柱状图&#xff0c;若用户只是学习Python的基础语法知识&#xff0c;可以不看此章节。 主要是讲解第三方包PyEcharts技术&#xff0c;Python数据的可视化操作。 一.json数据格式 json的概念&#xff1a; &#xff08;1&#x…...

【Hadoop3.1.4】完全分布式集群搭建

一、虚拟机的建立与连接 1.建立虚拟机 详情见【Linux】虚拟机的安装 把上面三个参数改掉 2.连接虚拟机 具体见【Linux】远程连接虚拟机防火墙 二、修改主机名 在Centos7中直接使用root用户执行hostnamectl命令修改&#xff0c;重启&#xff08;reboot&#xff09;后永久生…...

NLP简介及其发展历史

自然语言处理&#xff08;Natural Language Processing&#xff0c;简称NLP&#xff09;是人工智能和计算机科学领域中的一个重要分支&#xff0c;致力于实现人与计算机之间自然、高效的语言交流。本文将介绍NLP的基本概念以及其发展历史。 一、什么是自然语言处理&#xff1f…...

Java异步编程中的CompletableFuture介绍、常见错误及最佳实践

一、Future接口的局限性 Java 5引入的Future接口为异步编程提供了基础支持&#xff0c;但其设计存在明显局限性&#xff0c;导致复杂场景下难以满足需求&#xff1a; 阻塞获取结果 必须通过future.get()阻塞线程等待结果&#xff0c;无法实现真正的非阻塞&#xff1a; Executo…...

基于FLask的共享单车需求数据可视化分析系统

【FLask】基于FLask的共享单车需求数据可视化分析系统 &#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统能够整合并处理大量共享单车使用数据&#xff0c;通过直观的可视化手段&#xff0…...

vue2项目中,多个固定的请求域名 和 通过url动态获取到的ip域名 封装 axios

vue2 使用场景&#xff1a;项目中&#xff0c;有固定的请求域名&#xff0c;而有某些接口是其他域名 /utils/request.js 固定请求域名 import axios from axios import Vue from vuelet baseURL switch (window.location.hostname) {case localhost: // 本地case 127.0.0.1…...

【嵌入式学习3】基于python的tcp客户端、服务器

目录 1、tcp客户端 2、tcp服务器 3、服务器多次连接客户端、多次接收信息 1、tcp客户端 """ tcp:客户端 1. 导入socket模块 2. 创建socket套接字 3. 建立tcp连接(和服务端建立连接) 4. 开始发送数据(到服务端) 5. 关闭套接字 """ import soc…...

tomcat构建源码环境

一. IDEA运行Tomcat8源码 参考网址&#xff1a;https://blog.csdn.net/yekong1225/article/details/81000446 ​ Tomcat作为J2EE的开源实现&#xff0c;其代码具有很高的参考价值&#xff0c;我们可以从中汲取很多的知识。作为Java后端程序员&#xff0c;相信有很多人很想了解…...

你用的是Bing吗?!

&#x1f525;【深度解析】微软Bing革命性升级&#xff01;Copilot Search上线&#xff1a;从此搜索≠找链接&#xff0c;而是直接生成答案&#xff01; &#x1f4a1; 你是否厌倦了这样的搜索体验&#xff1f; 搜索「Python处理JSON」&#xff0c;在10个网页间反复跳转想对比…...

拍摄的婚庆视频有些DAT的视频文件打不开怎么办

3-12 现在的婚庆公司大多提供结婚的拍摄服务&#xff0c;或者有一些第三方公司做这方面业务&#xff0c;对于视频拍摄来说&#xff0c;有时候会遇到这样一种问题&#xff0c;就是拍摄下来的视频文件&#xff0c;然后会有一两个视频文件是损坏的&#xff0c;播放不了&#xff0…...

Oracle Cloud (OCI) 服务器最新控制台启用 IPv6 超详细图文指南(2025最新实践)

本文为原作者发布到第三方平台,更多内容参考: 🚀 Oracle Cloud (OCI) 服务器最新控制台启用 IPv6 超详细图文指南(2025最新实践) 随着 IPv6 的普及,IPv6的优秀特性能为你的 OCI 云服务器提升网络性能和路由效率,并提升兼容性。本指南将引导你在 Oracle Cloud Infrast…...

YOLO环境搭建,win11+wsl2+ubuntu24+cuda12.6+idea

提示&#xff1a;环境搭建 文章目录 前言一、 win11 gpu 驱动更新1.1 下载驱动3. 验证&#xff0c; 二、配置子系统 ubuntu2.1 安装 cuda 三、配置 anaconda四、idea 配置使用 wsl ubuntu conda 环境 前言 提示&#xff1a;版本 win11 wsl2 ubuntu24 idea 2024 子系统跳过&…...

类 和 对象 的介绍

对象的本质是一种新的数据类型。类是一个模型&#xff0c;对象是类的一个具体化实例。为类创建实例也就是创建对象。 一、类&#xff08;class&#xff09; 类决定一个对象将是什么样的&#xff08;有什么属性、功能&#xff09;。类和变量一样&#xff0c;有名字。 1.创建类 …...

机器学习(1)—线性回归

文章目录 1. 算法定义2. 模型形式2.1. 简单线性回归&#xff08;单变量&#xff09;&#xff1a;2.2. 多元线性回归&#xff08;多变量&#xff09;&#xff1a; 3. 基本原理3.1. 误差函数&#xff1a;3.2. 求解回归系数 4. 假设条件5. 模型评估6. 优缺点7. 扩展方法8. 应用场景…...

macOS下SourceInsight的替代品

macOS 推荐的几款开源、轻量级、且功能类似于 SourceInsight 的源码阅读工具&#xff08;排除 VS Code&#xff09;&#xff1a; 1. Zeal&#xff08;离线文档 简单代码导航&#xff09; 官网/GitHub: https://zealdocs.org/特点&#xff1a; 轻量级离线文档浏览器&#xff0…...

form实现pdf文件转换成jpg文件

说明&#xff1a; 我希望将pdf文件转换成jpg文件 请去下载并安装 Ghostscript&#xff0c;gs10050w64.exe 配置环境变量&#xff1a;D:\Program Files\gs\gs10.05.0\bin 本地pdf路径&#xff1a;C:\Users\wangrusheng\Documents\name.pdf 输出文件目录&#xff1a;C:\Users\wan…...

聊天室项目之http知识

一.http的核心组成部分&#xff08;都分成请求的和响应的&#xff09; 1.起始行&#xff1a;请求------------------------ 方法&#xff08;Method&#xff09;&#xff1a;GET、POST、PUT、DELETE 等。 请求目标&#xff08;Request Target&#xff09;&#xff1a;URL 路径…...

kubeadm部署 Kubernetes(k8s) 高可用集群 V1.28.2

1. 安装要求 在开始之前&#xff0c;部署Kubernetes集群机器需要满足以下几个条件&#xff1a; 10台机器&#xff0c;操作系统Openeuler22.03 LTS SP4硬件配置&#xff1a;2GB或更多RAM&#xff0c;2个CPU或更多CPU&#xff0c;硬盘30GB或更多&#xff0c;docker 数据卷单独挂…...

BUUCTF-web刷题篇(12)

21.easy_tornado Tornado大致可以分为四个主要组成部分&#xff1a; 一个web框架&#xff08;包括RequestHandler创建Web应用程序的子类&#xff0c;以及各种支持类&#xff09;。 HTTPServerHTTP&#xff08;和AsyncHTTPClient&#xff09;的客户端和服务器端实现。 一个异…...

基于 Netty 框架的 Java TCP 服务器端实现,用于启动一个 TCP 服务器来处理客户端的连接和数据传输

代码&#xff1a; package com.example.tpson_tcp;import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; imp…...

【Kafka基础】Kafka配置文件关键参数解析与单机生产环境配置指南

1 Kafka配置文件概述 Apache Kafka的配置文件是控制其行为的关键所在&#xff0c;合理的配置能够显著提升性能、可靠性和可维护性。Kafka主要涉及两个核心配置文件&#xff1a; server.properties&#xff1a;Broker主配置文件zookeeper.properties&#xff1a;ZooKeeper配置文…...

Kafka 漏消费和重复消费问题

Kafka 虽然是一个高可靠、高吞吐的消息系统&#xff0c;但如果使用不当&#xff0c;**“漏消费”和“重复消费”**问题是非常容易发生的&#xff0c;尤其在业务系统中会造成数据丢失、重复写库等严重问题。 &#x1f3af; 一句话理解&#xff1a; Kafka 本身提供 “至多一次”…...

Mysql慢查询设置 和 建立索引

1 .mysql慢查询的设置 slow_query_log ON //或 slow_query_log_file /usr/local/mysql/data/slow.log long_query_time 2 修改后重启动mysql 1.1 查看设置后的参数 mysql> show variables like slow_query%; --------------------------------------------------…...

Windows程序中计时器WM_TIMER消息的使用

本文章是对《Windows程序设计》这本书第八章计时器的总结&#xff0c;如果有时间&#xff0c;可以去看书里的讲解&#xff0c;如果时间不充裕&#xff0c;想马上知道计时器该如何使用&#xff0c;欢迎阅读本文&#xff0c;本文已经将计时器的干货整理完毕&#xff01; 什么是计…...

关于apple ios苹果mdm监管锁的漏洞与修复

前言 本人从2020年开始接触苹果mdm管理系统的开发 起初只是接触如何利用mdm进行app分发 23年开始开发mdm监管锁业务 随着手机租赁的市场兴起 mdm监管锁系统随即而生 注意 本人只是分享工作过程中遇到的一些问题 不接受苹果手机屏蔽以及解锁的业务 此文章仅做分享使用 MDM监…...

使用Geotools中的原始方法来操作PostGIS空间数据库

目录 前言 一、原生PostGIS连接介绍 1、连接参数说明 2、创建DataStore 二、工程实战 1、Maven Pom.xml定义 2、空间数据库表 3、读取空间表的数据 三、总结 前言 在当今数字化与信息化飞速发展的时代&#xff0c;空间数据的处理与分析已成为众多领域不可或缺的一环。从…...

C-S模式之实现一对一聊天

天天开心&#xff01;&#xff01;&#xff01; 文章目录 一、如何实现一对一聊天&#xff1f;1. 服务器设计2. 客户端设计3. 服务端代码实现4. 客户端代码实现5. 实现说明6.实验结果 二、改进常见的服务器高并发方案1. 多线程/多进程模型2. I/O多路复用3. 异步I/O&#xff08;…...

Kafka Consumer Group

Kafka 消费者组&#xff08;Consumer Group&#xff09; 是 Kafka 的核心机制之一&#xff01;理解它对你掌握 Kafka 的高可用、高吞吐、负载均衡等能力非常关键。下面我来给你完整讲一讲&#x1f447; &#x1f9e0; 什么是 Kafka 消费者组&#xff08;Consumer Group&#x…...

LangChain vs LlamaIndex:大模型应用开发框架深度对比与实战指南

一、引言:大模型时代的应用开发挑战 随着ChatGPT、LLaMA等大语言模型的爆发式发展,如何高效构建「大模型+垂直领域」的智能应用成为新课题。传统开发模式面临三大痛点: 数据交互复杂:大模型与本地数据的融合缺乏标准化接口功能扩展困难:链式调用、工具集成需要重复造轮子…...

第二章:访问远程服务_《凤凰架构:构建可靠的大型分布式系统》

第二章 访问远程服务 2.1 远程服务调用&#xff08;RPC&#xff09; 2.1.1 进程间通信机制 核心方式&#xff1a; 管道&#xff08;Pipe&#xff09;&#xff1a;单向通信&#xff0c;用于父子进程信号&#xff08;Signal&#xff09;&#xff1a;异步事件通知&#xff0c;不…...

一键自动备份:数据安全的双重保障

随着数字化时代的到来&#xff0c;数据已成为企业和个人不可或缺的核心资产。在享受数据带来的便捷与高效的同时&#xff0c;数据丢失的风险也随之增加。因此&#xff0c;备份文件的重要性不言而喻。本文将深入探讨备份文件的重要性&#xff0c;并介绍两种实用的自动备份方法&a…...

C++11之std::is_convertible

目录 1.简介 2.实现原理 3.使用场景 4.总结 1.简介 std::is_convertible 是 C 标准库 <type_traits> 头文件中的一个类型特性&#xff08;type trait&#xff09;&#xff0c;它用于在编译时检查一个类型是否可以隐式转换为另一个类型。下面的原型&#xff1a; temp…...

从零开始:在Qt中使用OpenGL绘制指南

从零开始&#xff1a;在Qt中使用OpenGL绘制指南 本文只介绍基本的 QOpenGLWidget 和 QOpenGLFunctions 的使用&#xff0c;想要学习 OpenGL 的朋友&#xff0c;建议访问经典 OpenGL 学习网站&#xff1a;LearnOpenGL CN 本篇文章&#xff0c;我们将以绘制一个经典的三角形为例&…...

我的购物车设计思考:从个人项目到生产实战思考的蜕变

一、代码初体验&#xff1a;我踩过的那些坑 还记得大二做课程设计时&#xff0c;我写的购物车直接用ArrayList存商品&#xff0c;结果改数量时遍历半天找商品。现在看你这个HashMap实现&#xff0c;确实清爽很多&#xff0c;但有几点让我想起当年惨痛经历&#xff1a; 1. 线程…...

【算法实践】算法面试常见问题——数组的波浪排序

问题描述 给定一个无序整数数组&#xff0c;将其排列成波浪形数组。若数组 arr[0..n-1] 满足以下条件&#xff0c;则称为波浪形&#xff1a; arr[0] > arr[1] < arr[2] > arr[3] < arr[4] > ... 或 arr[0] < arr[1] > arr[2] < arr[3] > arr[4] &l…...

【大模型深度学习】如何估算大模型需要的显存

一、模型参数量 参数量的单位 参数量指的是模型中所有权重和偏置的数量总和。在大模型中&#xff0c;参数量的单位通常以“百万”&#xff08;M&#xff09;或“亿”&#xff08;B&#xff0c;也常说十亿&#xff09;来表示。 百万&#xff08;M&#xff09;&#xff1a;表示…...

[论文阅读]PMC-LLaMA: Towards Building Open-source Language Models for Medicine

PMC-LLaMA&#xff1a;构建医学开源语言模型 摘要 最近&#xff0c;大语言模型在自然语言理解方面展现了非凡的能力。尽管在日常交流和问答场景下表现很好&#xff0c;但是由于缺乏特定领域的知识&#xff0c;这些模型在需要精确度的领域经常表现不佳&#xff0c;例如医学应用…...

`use_tempaddr` 和 `temp_valid_lft ` 和 `temp_prefered_lft ` 笔记250405

use_tempaddr 和 temp_valid_lft 和 temp_prefered_lft 笔记250405 以下是 Linux 系统中与 IPv6 临时隐私地址相关的三个关键参数 use_tempaddr、temp_valid_lft 和 temp_prefered_lft 的详细说明及协作关系&#xff1a; &#x1f4dc; 参数定义与功能 参数作用默认值依赖关…...

如何设置 JVM 内存参数(-Xms、-Xmx、-Xss 等)?

JVM 内存参数用于控制 Java 虚拟机使用的内存大小和行为。以下是一些常用的 JVM 内存参数及其设置方法&#xff1a; 1. 堆内存 (Heap Memory): -Xms<size>: 设置 JVM 初始堆大小 (initial heap size)。 例如&#xff1a;-Xms2g (初始堆大小为 2GB)默认值&#xff1a;物…...

【MATLAB TCP/IP客户端与NetAssist上位机双向通信实战指南】

MATLAB TCP/IP客户端与NetAssist上位机双向通信实战指南 一、前言 在工业控制和数据采集领域&#xff0c;TCP/IP通信是最常用的网络通信协议之一。MATLAB作为强大的科学计算软件&#xff0c;与各种上位机软件(如NetAssist)进行通信可以实现数据采集、设备控制和实时监控等功能…...

联合、枚举、类型别名

数据类型&#xff1a; 已学--整数、实数、字符、字符串、数组、指针、结构待学--向量&#xff08;vector&#xff09;类型&#xff1a;优于数组非主流的类型--联合&#xff08;union&#xff09;、枚举&#xff08;enum&#xff09; 一、联合 联合类似于结构&#xff0c;可以容…...

Array 和 ArrayList 有何区别?什么时候更适合用 Array?

面试官提问&#xff1a; 你能简要说明 Array 和 ArrayList 之间的主要区别吗&#xff1f;在什么场景下更适合使用 Array&#xff1f; 标准回答&#xff1a; 在 Java 中&#xff0c;Array&#xff08;数组&#xff09;和 ArrayList&#xff08;动态数组&#xff09;都可以用于存…...