【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 <字段> | 自定义输出字段(支持 pid , user , %cpu , comm , tty , stat 等)。 | 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 | 进程状态(由多个字符组成,见下方详细说明)。 | Ss , R+ , D |
TIME | 进程累计占用CPU的时间(格式为分钟:秒 )。 | 00:01 , 10:23 |
COMMAND | 启动进程的命令名称或命令行参数: - [] 表示内核线程。 | /usr/bin/nginx , [kworker] |
ps aux的默认输出列
列名 | 说明 | 示例 |
---|---|---|
USER | 进程的所有者(用户账号)。 | root , nginx |
PID | 进程的唯一标识符(Process ID)。 | 1234 |
%CPU | 进程占用CPU的百分比(单位:%),基于最近一次刷新周期内的使用情况。 | 0.5 , 99.0 |
%MEM | 进程占用物理内存的百分比(单位:%)。 | 2.3 , 15.8 |
VSZ | 虚拟内存大小(Virtual Memory Size,单位:KB),即进程申请的虚拟内存总量。 | 123456 (约123MB) |
RSS | 实际使用的物理内存(Resident Set Size,单位:KB),即进程当前占用的非交换内存。 | 65432 (约65MB) |
TTY | 进程关联的终端设备: - ? :无控制终端(如守护进程)。- pts/0 :虚拟终端或SSH会话。 | ? 或 pts/0 |
STAT | 进程状态(由多个字符组成,见下方详细说明)。 | Ss , R+ , Dl |
START | 进程启动时间(格式为小时:分钟或日期,取决于运行时长)。 | 10:00 , Jan01 |
TIME | 进程累计占用CPU的时间(格式为分钟:秒 )。 | 00:01 , 120:45 |
COMMAND | 启动进程的命令名称或命令行参数: - [] 表示内核线程。 | /usr/bin/nginx , [kworker] |
2、pgrep
pgrep
命令核心作用
pgrep
用于根据 进程名、用户、组等条件快速查找进程PID,默认仅输出匹配的进程ID(PID)。
与ps
/grep
组合相比,pgrep
更高效且语法简洁。
pgrep
默认输出信息
输出内容 | 说明 | 示例 |
---|---|---|
PID | 匹配条件的进程ID(每行一个)。 | 1234 5678 |
pgrep的显示参数
参数 | 说明 | 输出新增内容 | 示例 |
---|---|---|---|
基础过滤 | |||
-u <用户> | 按用户过滤进程(用户名或UID)。 | 无,仅PID | pgrep -u root |
-G <组> | 按组过滤进程(组名或GID)。 | 无,仅PID | pgrep -G www-data |
-x | 精确匹配进程名(需全名匹配)。 | 无,仅PID | pgrep -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。 | 无,仅PID | pgrep -n nginx |
-o | 仅显示最旧(最早启动)的进程PID。 | 无,仅PID | pgrep -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
的核心功能
-
实时刷新:默认每 3 秒更新一次数据(可配置)。
-
多维度展示:
-
系统资源概览:CPU、内存、负载、运行时间等。
-
进程列表:按资源占用排序的进程详情(PID、用户、CPU、内存等)。
-
-
交互式操作:支持动态排序、筛选、终止进程等操作。
2)top显示内容详解
显示内容分为上下部分;上部分:
-
第一行:系统时间、运行时长、登录用户数、平均负载。
-
第二行:进程总数及状态统计(运行、睡眠、停止、僵尸)。
-
第三行:CPU 使用率(用户态
us
、内核态sy
、空闲id
、等待I/Owa
等)。 -
第四行:物理内存使用情况(总量、空闲、已用、缓存)。
-
第五行:交换分区使用情况。
下部分:
关键字段:
-
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 的作用
-
挂起前台进程
按下Ctrl+Z
会立即暂停当前正在终端前台运行的进程(如脚本、命令等),并将其放入后台的作业列表中。进程进入STOPPED
状态,但并未终止。 -
返回终端控制权
挂起后,终端会释放控制权,允许用户继续执行其他命令。
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)进程状态字符解释
主要字符
字符 | 名称 | 说明 |
---|---|---|
R | Running | 进程正在运行或在就绪队列中等待 CPU 分配。 |
S | Interruptible Sleep | 可中断睡眠:等待事件完成(如 I/O 操作、信号)。 |
D | Uninterruptible Sleep | 不可中断睡眠:通常等待硬件操作(如磁盘 I/O),不能被信号中断。 |
Z | Zombie | 僵尸进程:进程已终止,但其退出状态未被父进程回收。 |
T | Stopped | 进程被作业控制信号(如 SIGSTOP 、SIGTSTP )暂停。 |
t | Tracing Stop | 进程被调试器暂停(如通过 ptrace 跟踪)。 |
X | Dead | 进程完全终止(极少见,通常瞬间消失)。 |
次要字符
字符 | 说明 |
---|---|
< | 高优先级:进程的 Nice 值为负(优先级高于默认)。 |
N | 低优先级:进程的 Nice 值为正(优先级低于默认)。 |
s | 会话领导者:进程是会话(Session)的首进程(如 Shell 进程)。 |
l | 多线程:进程是多线程的(有多个轻量级进程 LWP)。 |
+ | 前台进程组:进程属于终端的前台进程组(可接收输入)。 |
L | 锁定内存:进程将部分内存锁定(如通过 mlock 避免换出)。 |
I | 空闲进程:内核线程处于空闲状态(某些系统显示为 I )。 |
六、进程的信号
1、概念
2、用户能够控制的进程信号(表)
信号名称 | 信号值 | 默认行为 | 典型用途 | 可否捕获/忽略 |
---|---|---|---|---|
SIGHUP | 1 | 终止进程 | 通知进程重新加载配置(如 nginx -s reload )。 | 是 |
SIGINT | 2 | 终止进程 | 用户按下 Ctrl+C 中断前台进程。 | 是 |
SIGQUIT | 3 | 终止进程并生成核心转储 | 用户按下 Ctrl+\ 强制终止并调试(生成 core dump)。 | 是 |
SIGKILL | 9 | 强制终止进程 | 无条件终止进程(无法被捕获或忽略)。 | 否 |
SIGTERM | 15 | 终止进程 | 请求进程正常退出(允许清理资源),默认的 kill 信号。 | 是 |
SIGSTOP | 17,19,23 | 暂停进程 | 暂停进程(不可被捕获或忽略),用户按下 Ctrl+Z (实际发送 SIGTSTP )。 | 否 |
SIGCONT | 18,25,26 | 继续运行 | 恢复被暂停的进程(如 bg /fg 命令)。 | 是 |
SIGTSTP | 20 | 暂停进程 | 用户按下 Ctrl+Z 暂停前台进程(可捕获处理)。 | 是 |
SIGUSR1 | 10 | 终止进程 | 用户自定义用途(如通知进程切换日志文件)。 | 是 |
SIGUSR2 | 12 | 终止进程 | 用户自定义用途(如通知进程更新配置)。 | 是 |
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)概念 进程是程序的执行实例,拥有独立的资源(如内存、文件描述符等)。每个进程在创建时会被分配唯一的进程ID,即为PID,也叫进程编号。 2)特点 资源隔离&#…...
使用Webpack搭建React项目:从零开始
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
使用Cusor 生成 Figma UI 设计稿
一、开发环境 系统:MacOS 软件版本: Figma(网页或APP版) 注:最好是app版,网页版figma 没有选项 import from manifest app下载地址:Figma Downloads | Web Design App for Desktops & …...
前端 vs 后端:技术分工详解——从用户界面到系统逻辑的全解析
前端(Frontend) 和 后端(Backend) 是软件开发中两个核心概念,分别对应用户直接交互的部分和系统背后的逻辑处理部分。它们共同构成完整的应用程序,但分工不同。 目录 一、前端(Frontend…...
CentOS 7上配置SQL Server链接其他SQL Server服务器
概述 本文介绍在CentOS 7系统上运行的SQL Server如何链接访问其他SQL Server服务器的详细步骤,包括驱动安装、配置和连接测试。 安装必要组件 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发布的同时,Scade团队发布了一系列介绍Scade One的博客。本篇Scade One - Democratizing model-based development是其中的一部分。在后面的内容中,将复述博客…...
第十二章:容器间网络_《凤凰架构:构建可靠的大型分布式系统》
第十二章 容器间网络 一、Linux网络虚拟化基础 1. 网络命名空间(Network Namespace) 隔离网络栈:每个网络命名空间拥有独立的IP地址、路由表、防火墙规则等网络配置。实现方式:通过ip netns命令管理,容器启动时自动创…...
详解七大排序
目录 一.直接插入排序 (1)基本思想 (2)算法步骤 (3)代码实现 (4)算法特性 (5)算法优化 (6)示例演示 二.希尔排序 (…...
第八章 Python基础进阶-数据可视化(终)
此章节练习主要分为:折线图、地图、柱状图,若用户只是学习Python的基础语法知识,可以不看此章节。 主要是讲解第三方包PyEcharts技术,Python数据的可视化操作。 一.json数据格式 json的概念: (1&#x…...
【Hadoop3.1.4】完全分布式集群搭建
一、虚拟机的建立与连接 1.建立虚拟机 详情见【Linux】虚拟机的安装 把上面三个参数改掉 2.连接虚拟机 具体见【Linux】远程连接虚拟机防火墙 二、修改主机名 在Centos7中直接使用root用户执行hostnamectl命令修改,重启(reboot)后永久生…...
NLP简介及其发展历史
自然语言处理(Natural Language Processing,简称NLP)是人工智能和计算机科学领域中的一个重要分支,致力于实现人与计算机之间自然、高效的语言交流。本文将介绍NLP的基本概念以及其发展历史。 一、什么是自然语言处理?…...
Java异步编程中的CompletableFuture介绍、常见错误及最佳实践
一、Future接口的局限性 Java 5引入的Future接口为异步编程提供了基础支持,但其设计存在明显局限性,导致复杂场景下难以满足需求: 阻塞获取结果 必须通过future.get()阻塞线程等待结果,无法实现真正的非阻塞: Executo…...
基于FLask的共享单车需求数据可视化分析系统
【FLask】基于FLask的共享单车需求数据可视化分析系统 (完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统能够整合并处理大量共享单车使用数据,通过直观的可视化手段࿰…...
vue2项目中,多个固定的请求域名 和 通过url动态获取到的ip域名 封装 axios
vue2 使用场景:项目中,有固定的请求域名,而有某些接口是其他域名 /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源码 参考网址:https://blog.csdn.net/yekong1225/article/details/81000446 Tomcat作为J2EE的开源实现,其代码具有很高的参考价值,我们可以从中汲取很多的知识。作为Java后端程序员,相信有很多人很想了解…...
你用的是Bing吗?!
🔥【深度解析】微软Bing革命性升级!Copilot Search上线:从此搜索≠找链接,而是直接生成答案! 💡 你是否厌倦了这样的搜索体验? 搜索「Python处理JSON」,在10个网页间反复跳转想对比…...
拍摄的婚庆视频有些DAT的视频文件打不开怎么办
3-12 现在的婚庆公司大多提供结婚的拍摄服务,或者有一些第三方公司做这方面业务,对于视频拍摄来说,有时候会遇到这样一种问题,就是拍摄下来的视频文件,然后会有一两个视频文件是损坏的,播放不了࿰…...
Oracle Cloud (OCI) 服务器最新控制台启用 IPv6 超详细图文指南(2025最新实践)
本文为原作者发布到第三方平台,更多内容参考: 🚀 Oracle Cloud (OCI) 服务器最新控制台启用 IPv6 超详细图文指南(2025最新实践) 随着 IPv6 的普及,IPv6的优秀特性能为你的 OCI 云服务器提升网络性能和路由效率,并提升兼容性。本指南将引导你在 Oracle Cloud Infrast…...
YOLO环境搭建,win11+wsl2+ubuntu24+cuda12.6+idea
提示:环境搭建 文章目录 前言一、 win11 gpu 驱动更新1.1 下载驱动3. 验证, 二、配置子系统 ubuntu2.1 安装 cuda 三、配置 anaconda四、idea 配置使用 wsl ubuntu conda 环境 前言 提示:版本 win11 wsl2 ubuntu24 idea 2024 子系统跳过&…...
类 和 对象 的介绍
对象的本质是一种新的数据类型。类是一个模型,对象是类的一个具体化实例。为类创建实例也就是创建对象。 一、类(class) 类决定一个对象将是什么样的(有什么属性、功能)。类和变量一样,有名字。 1.创建类 …...
机器学习(1)—线性回归
文章目录 1. 算法定义2. 模型形式2.1. 简单线性回归(单变量):2.2. 多元线性回归(多变量): 3. 基本原理3.1. 误差函数:3.2. 求解回归系数 4. 假设条件5. 模型评估6. 优缺点7. 扩展方法8. 应用场景…...
macOS下SourceInsight的替代品
macOS 推荐的几款开源、轻量级、且功能类似于 SourceInsight 的源码阅读工具(排除 VS Code): 1. Zeal(离线文档 简单代码导航) 官网/GitHub: https://zealdocs.org/特点: 轻量级离线文档浏览器࿰…...
form实现pdf文件转换成jpg文件
说明: 我希望将pdf文件转换成jpg文件 请去下载并安装 Ghostscript,gs10050w64.exe 配置环境变量:D:\Program Files\gs\gs10.05.0\bin 本地pdf路径:C:\Users\wangrusheng\Documents\name.pdf 输出文件目录:C:\Users\wan…...
聊天室项目之http知识
一.http的核心组成部分(都分成请求的和响应的) 1.起始行:请求------------------------ 方法(Method):GET、POST、PUT、DELETE 等。 请求目标(Request Target):URL 路径…...
kubeadm部署 Kubernetes(k8s) 高可用集群 V1.28.2
1. 安装要求 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 10台机器,操作系统Openeuler22.03 LTS SP4硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多,docker 数据卷单独挂…...
BUUCTF-web刷题篇(12)
21.easy_tornado Tornado大致可以分为四个主要组成部分: 一个web框架(包括RequestHandler创建Web应用程序的子类,以及各种支持类)。 HTTPServerHTTP(和AsyncHTTPClient)的客户端和服务器端实现。 一个异…...
基于 Netty 框架的 Java TCP 服务器端实现,用于启动一个 TCP 服务器来处理客户端的连接和数据传输
代码: 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的配置文件是控制其行为的关键所在,合理的配置能够显著提升性能、可靠性和可维护性。Kafka主要涉及两个核心配置文件: server.properties:Broker主配置文件zookeeper.properties:ZooKeeper配置文…...
Kafka 漏消费和重复消费问题
Kafka 虽然是一个高可靠、高吞吐的消息系统,但如果使用不当,**“漏消费”和“重复消费”**问题是非常容易发生的,尤其在业务系统中会造成数据丢失、重复写库等严重问题。 🎯 一句话理解: 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程序设计》这本书第八章计时器的总结,如果有时间,可以去看书里的讲解,如果时间不充裕,想马上知道计时器该如何使用,欢迎阅读本文,本文已经将计时器的干货整理完毕! 什么是计…...
关于apple ios苹果mdm监管锁的漏洞与修复
前言 本人从2020年开始接触苹果mdm管理系统的开发 起初只是接触如何利用mdm进行app分发 23年开始开发mdm监管锁业务 随着手机租赁的市场兴起 mdm监管锁系统随即而生 注意 本人只是分享工作过程中遇到的一些问题 不接受苹果手机屏蔽以及解锁的业务 此文章仅做分享使用 MDM监…...
使用Geotools中的原始方法来操作PostGIS空间数据库
目录 前言 一、原生PostGIS连接介绍 1、连接参数说明 2、创建DataStore 二、工程实战 1、Maven Pom.xml定义 2、空间数据库表 3、读取空间表的数据 三、总结 前言 在当今数字化与信息化飞速发展的时代,空间数据的处理与分析已成为众多领域不可或缺的一环。从…...
C-S模式之实现一对一聊天
天天开心!!! 文章目录 一、如何实现一对一聊天?1. 服务器设计2. 客户端设计3. 服务端代码实现4. 客户端代码实现5. 实现说明6.实验结果 二、改进常见的服务器高并发方案1. 多线程/多进程模型2. I/O多路复用3. 异步I/O(…...
Kafka Consumer Group
Kafka 消费者组(Consumer Group) 是 Kafka 的核心机制之一!理解它对你掌握 Kafka 的高可用、高吞吐、负载均衡等能力非常关键。下面我来给你完整讲一讲👇 🧠 什么是 Kafka 消费者组(Consumer Group&#x…...
LangChain vs LlamaIndex:大模型应用开发框架深度对比与实战指南
一、引言:大模型时代的应用开发挑战 随着ChatGPT、LLaMA等大语言模型的爆发式发展,如何高效构建「大模型+垂直领域」的智能应用成为新课题。传统开发模式面临三大痛点: 数据交互复杂:大模型与本地数据的融合缺乏标准化接口功能扩展困难:链式调用、工具集成需要重复造轮子…...
第二章:访问远程服务_《凤凰架构:构建可靠的大型分布式系统》
第二章 访问远程服务 2.1 远程服务调用(RPC) 2.1.1 进程间通信机制 核心方式: 管道(Pipe):单向通信,用于父子进程信号(Signal):异步事件通知,不…...
一键自动备份:数据安全的双重保障
随着数字化时代的到来,数据已成为企业和个人不可或缺的核心资产。在享受数据带来的便捷与高效的同时,数据丢失的风险也随之增加。因此,备份文件的重要性不言而喻。本文将深入探讨备份文件的重要性,并介绍两种实用的自动备份方法&a…...
C++11之std::is_convertible
目录 1.简介 2.实现原理 3.使用场景 4.总结 1.简介 std::is_convertible 是 C 标准库 <type_traits> 头文件中的一个类型特性(type trait),它用于在编译时检查一个类型是否可以隐式转换为另一个类型。下面的原型: temp…...
从零开始:在Qt中使用OpenGL绘制指南
从零开始:在Qt中使用OpenGL绘制指南 本文只介绍基本的 QOpenGLWidget 和 QOpenGLFunctions 的使用,想要学习 OpenGL 的朋友,建议访问经典 OpenGL 学习网站:LearnOpenGL CN 本篇文章,我们将以绘制一个经典的三角形为例&…...
我的购物车设计思考:从个人项目到生产实战思考的蜕变
一、代码初体验:我踩过的那些坑 还记得大二做课程设计时,我写的购物车直接用ArrayList存商品,结果改数量时遍历半天找商品。现在看你这个HashMap实现,确实清爽很多,但有几点让我想起当年惨痛经历: 1. 线程…...
【算法实践】算法面试常见问题——数组的波浪排序
问题描述 给定一个无序整数数组,将其排列成波浪形数组。若数组 arr[0..n-1] 满足以下条件,则称为波浪形: arr[0] > arr[1] < arr[2] > arr[3] < arr[4] > ... 或 arr[0] < arr[1] > arr[2] < arr[3] > arr[4] &l…...
【大模型深度学习】如何估算大模型需要的显存
一、模型参数量 参数量的单位 参数量指的是模型中所有权重和偏置的数量总和。在大模型中,参数量的单位通常以“百万”(M)或“亿”(B,也常说十亿)来表示。 百万(M):表示…...
[论文阅读]PMC-LLaMA: Towards Building Open-source Language Models for Medicine
PMC-LLaMA:构建医学开源语言模型 摘要 最近,大语言模型在自然语言理解方面展现了非凡的能力。尽管在日常交流和问答场景下表现很好,但是由于缺乏特定领域的知识,这些模型在需要精确度的领域经常表现不佳,例如医学应用…...
`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 的详细说明及协作关系: 📜 参数定义与功能 参数作用默认值依赖关…...
如何设置 JVM 内存参数(-Xms、-Xmx、-Xss 等)?
JVM 内存参数用于控制 Java 虚拟机使用的内存大小和行为。以下是一些常用的 JVM 内存参数及其设置方法: 1. 堆内存 (Heap Memory): -Xms<size>: 设置 JVM 初始堆大小 (initial heap size)。 例如:-Xms2g (初始堆大小为 2GB)默认值:物…...
【MATLAB TCP/IP客户端与NetAssist上位机双向通信实战指南】
MATLAB TCP/IP客户端与NetAssist上位机双向通信实战指南 一、前言 在工业控制和数据采集领域,TCP/IP通信是最常用的网络通信协议之一。MATLAB作为强大的科学计算软件,与各种上位机软件(如NetAssist)进行通信可以实现数据采集、设备控制和实时监控等功能…...
联合、枚举、类型别名
数据类型: 已学--整数、实数、字符、字符串、数组、指针、结构待学--向量(vector)类型:优于数组非主流的类型--联合(union)、枚举(enum) 一、联合 联合类似于结构,可以容…...
Array 和 ArrayList 有何区别?什么时候更适合用 Array?
面试官提问: 你能简要说明 Array 和 ArrayList 之间的主要区别吗?在什么场景下更适合使用 Array? 标准回答: 在 Java 中,Array(数组)和 ArrayList(动态数组)都可以用于存…...