Linux笔记---信号(上)
1. 信号的概念
Linux下的信号机制是一种进程间通信(IPC)的方式,用于在不同进程之间传递信息。
信号是一种异步的信息传递方式,这意味着发送信号的进程只发送由信号作为载体的命令,而并不关心接收信号的进程如何处置这个命令(做不做、何时做、怎么做、结果如何等)。
这样,在发送完命令之后,发送命令的进程就可以着手自己的其他任务,而无需等待对方反馈的结果(或者说无需与对方进行同步)。同时也就意味着接收信号的进程对于命令的处置是相对自由的,甚至可以直接忽略。
例如,菜鸟驿站给你发消息告诉你包裹到了(这就是一种信号),你可以去取,也可以不取(富哥不想要了,又懒得退款,或者单纯忘了);你可以立即去取,也可以等几个小时/几天再取;你可以自己去取,也可以叫好友帮取,甚至叫个跑腿去取。
但有时候我们又希望自己发送的信号是绝对有效的,不可被轻视的。于是,我们可以将信号分为可靠信号和不可靠信号,一共62种(1~64,除开32和33):
不可靠信号:也称为非实时信号,不支持排队,信号可能会丢失。比如发送多次相同的信号,进程只能收到一次,信号值取值区间为1~31。
可靠信号:也称为实时信号,支持排队,信号不会丢失,发多少次,就可以收到多少次,信号值取值区间为34~64。
使用 [ kill -l ] 指令可以进行查看:
2. 信号的处理
2.1 默认处理
每个信号都有默认的处理方式,如SIGINT
信号的默认处理是终止进程,SIGTERM
信号的默认处理也是终止进程,SIGSEGV
信号的默认处理是产生核心转储并终止进程。
man 7 signal
找到标题:Standard signals
- Core(核心转储并终止进程):如SIGABRT、SIGFPE信号,当这些信号发生时,系统会进行核心转储并且终止进程。
- Term(终止进程):像SIGALRM、SIGHUP信号,这些信号的默认动作是终止进程。
- Ign(忽略信号):对于SIGCHLD、SIGCLD信号,系统默认会忽略这些信号。
- Cont(继续执行):对于SIGCONT信号,其默认动作是如果进程处于停止状态则继续执行。
- Stop(停止进程):对于SIGSTOP信号,它会使进程停止执行,且不能被捕获、忽略或阻塞。
可以看到,大多数信号的默认处理方式都是终止进程。
2.2 捕获信号
进程可以通过设置信号处理函数来捕获信号并执行自定义的处理逻辑。例如,可以在信号处理函数中记录日志、进行资源清理等操作。
#include <signal.h>typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);
功能
设置信号处理程序:
signal
函数用于设置一个函数来处理特定的信号。当指定的信号发生时,系统会调用相应的信号处理函数。
参数
sig:表示要处理的信号码。常见的信号常量包括
SIGABRT
(程序异常终止)、SIGFPE
(算术运算出错)、SIGILL
(非法指令)、SIGINT
(中断信号,如Ctrl+C)、SIGSEGV
(非法访问存储器)、SIGTERM
(终止请求)等。func:是一个指向函数的指针,用于指定信号处理程序。可以是自定义的函数,也可以是以下预定义函数之一:
SIG_DFL:表示使用该信号的默认处理程序。
SIG_IGN:表示忽略该信号。
返回值
成功时:返回信号处理程序之前的值。
出错时:返回
SIG_ERR
。
例如,我们编写一个循环打印 hello world 的程序, 并让他捕获2号信号,即ctrl + c发出的信号:
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>void SigHandler(int sigid)
{std::cout << "获得信号: " << sigid << std::endl;exit(sigid);
}int main()
{signal(SIGINT, SigHandler);for(int i = 0; true; i++){std::cout << "Hello World[" << i << "]" << ", pid:[" << getpid() << "]" << std::endl;sleep(1);}return 0;
}
当我们在程序运行的过程中按下 ctrl + c 时,程序会显示获得信号:
2.3 忽略信号
进程可以通过设置信号处理函数为SIG_IGN
来忽略某个信号。但有些信号是不能被忽略的,如SIGKILL
和SIGSTOP
信号。
3. 信号的产生方式
用户输入:用户在终端输入特定的快捷键组合,如
Ctrl+C
会产生SIGINT
信号,Ctrl+\
会产生SIGQUIT
信号,Ctrl+Z
会产生SIGTSTP
信号。程序执行异常:当程序执行过程中出现错误或异常情况时,内核会发送相应的信号。例如,对一个数除0会产生
SIGFPE
信号,非法访问一段内存会产生SIGBUS
信号,访问未分配的虚拟内存会产生SIGSEGV
信号。进程间发送信号:一个进程可以通过系统调用向另一个进程发送信号。例如,使用
kill
函数可以向指定进程发送信号,raise
函数可以向本进程发送信号,sigqueue
函数可以向一个进程发送信号并传递额外数据。
用户输入方式我们在前面已经见识过,就不再多说。
3.1 程序执行异常
我们的程序在遇到运行时错误时会报错并退出,这就是因为程序在发生执行异常时会引发硬件异常中断,操作系统检测到之后,就会向引发异常的进程发送一个信号,进而终止进程。
下面的代码中,我们尝试捕捉由除零引发的异常和使用野指针引发的异常:
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>void SigHandler(int sigid)
{std::cout << "获得信号: " << sigid << std::endl;exit(sigid);
}int main()
{for(int i = 1; i < 32; i++){signal(i, SigHandler);}// 8) SIGFPEint a = 10;a /= 0;// 11) SIGSEGV// int *p = nullptr;// *p = 100;return 0;
}
除零异常导致程序退出:
使用野指针导致程序退出:
3.2 进程间发送信号
3.2.1 kill命令
kill -[信号编号] [指定进程pid]
在命令行使用kill指令可像指定进程发送指定信号。
3.2.2 kill函数
#include <sys/types.h>
#include <signal.h>int kill(pid_t pid, int sig);
功能
kill
函数用于向指定的进程或进程组发送信号,以实现进程间的通知或控制。
参数
pid:表示要发送信号的目标进程或进程组的标识符。
pid > 0:将信号发送给进程标识为
pid
的进程。pid = 0:将信号发送给与调用
kill
函数的进程属于同一进程组的所有进程。pid = -1:将信号发送给除了进程1(
init
进程)和调用者自身以外的所有进程。pid < -1:将信号发送给进程组ID等于pid绝对值的所有进程。
sig:表示要发送的信号。可以是以下常见信号常量之一
返回值
成功时:返回0。
出错时:返回-1,并设置
errno
以指示错误原因。
3.2.3 raise函数
#include <signal.h>int raise(int sig);
功能:向调用该函数的进程发送一个信号(即向自己发送信号)。
参数:
sig
表示要发送的信号编号。返回值:成功时返回0;失败时返回非0值。
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>void SigHandler(int sigid)
{std::cout << "获得信号: " << sigid << std::endl;exit(sigid);
}int main()
{for(int i = 1; i < 32; i++){signal(i, SigHandler);}for(int i = 1; i < 32; i++){sleep(1);// 给自己发信号if(i == 9 || i == 19) // 9-SIGKILL 19-SIGSTOP不能被自定义捕获 continue;raise(i);}return 0;
}
9号信号SIGKILL和19号信号SIGSTOP无法被自定义捕获,这是为了防止出现所有信号都被捕获而无法通过信号使目标进程被强制停止的情况。
3.2.4 abort函数
#include <stdlib.h>void abort(void);
功能:abort
函数用于立即终止当前程序的执行,通常在检测到不可恢复的错误时使用。
特点:
不执行清理工作:
abort
函数不会执行任何atexit
注册的函数或对象析构函数,也不会刷新流缓冲区或关闭打开的文件等常规清理操作。产生核心转储文件:在某些系统上,如果系统配置允许,
abort
函数会产生一个核心转储文件,用于调试程序异常终止的原因。发送信号:
abort
函数会向调用进程发送SIGABRT
信号,进程不应忽略此信号。
3.2.5 sigqueue函数
功能:向指定的进程发送特定的信号,并可以传递一个额外的数据值,提供了比kill函数更丰富的功能,可用于进程间的高级通信。
暂时不做介绍。
4. 补充:前后台进程
在大多数用户交互式操作系统当中,都会把进程分为前台进程和后台进程,在Linux中二者的概念如下:
前台进程:是与用户直接交互的进程,占有控制终端,可以从终端接收输入并向终端发送输出。在任何时刻,只有一个进程组可以在前台运行。
后台进程:是不与用户直接交互的进程,在后台默默运行,不占用控制终端。
用户在命令行启动可执行程序时,该可执行程序默认以前台方式运行,由于前台进程只有一个,所以操作系统会将bash切换到后台运行,待可执行程序运行结束或者被切换到后台时,再将bash切换回前台。
如果用户希望进程被启动后在后台运行,可在其后跟上 & :
可以看到,我们让SigTest运行起来之后,bash和SigTest都在往标准输出打印,当我们输入ls指令之后,发现处于前台的bash获得了我们的输入,并运行了ls。
此时,如果我们想要通过[ctrl + c]的方式来结束SigTest是行不通的,因为只有前台进程能接收到我们的输入。此时我们有两种做法:
- 使用kill -9指定终止SigTest。
- 将SigTest放到前台,再使用[ctrl + c]。
前者不再进行说明了,接下来我们讲解一下如何在命令行控制进程的前后台切换。
在Linux中,与前后台相关的指令主要用于管理进程的运行状态,以下是一些常用的指令:
后台运行指令
- &:在命令末尾添加“&”符号,可以使程序在后台运行,例如“./matmul &”将运行一个名为matmul的程序并使其在后台运行,这样用户就可以在前台继续执行其他命令。
- nohup:nohup命令用于在后台运行命令,即使终端关闭或用户退出,命令也会继续执行。例如,“nohup ping 101.lug.ustc.edu.cn &”将在后台运行ping命令,并将输出重定向到nohup.out文件中。
前后台切换指令
- Ctrl+Z:将当前正在前台执行的命令或进程暂停,并放入后台。例如,当一个命令在前台运行时,按下Ctrl+Z,该命令将被暂停并放入后台,屏幕上会显示相关的状态信息。
- jobs:用于查看当前在后台运行的进程或任务的列表,以及它们的状态和作业号。例如,“jobs -l”将显示详细的后台进程信息,包括进程ID、状态等。
- fg:将后台中的进程调至前台继续运行。例如,“fg %1”将把后台中作业号为1的进程调至前台运行。
- bg:将后台中暂停的进程继续在后台运行。例如,“bg %2”将使后台中作业号为2的进程在后台继续运行。
其他相关指令
- ps:用于查看当前系统中正在运行的进程的状态和信息。例如,“ps aux”将显示所有用户的所有进程的详细信息。
- kill:用于向进程发送信号,通常用于终止进程。例如,“kill -9 PID”将强制终止指定PID的进程。
- top:用于实时查看系统中各个进程的资源占用情况,包括CPU、内存等。
- htop:是top命令的增强版,提供了更直观和交互性更强的界面,用于查看和管理进程。
相关文章:
Linux笔记---信号(上)
1. 信号的概念 Linux下的信号机制是一种进程间通信(IPC)的方式,用于在不同进程之间传递信息。 信号是一种异步的信息传递方式,这意味着发送信号的进程只发送由信号作为载体的命令,而并不关心接收信号的进程如何处置这…...
FanControl(电脑风扇转速控制软件) v224 中文版
FanControl是一款用于控制计算机风扇速度的软件。它能够监测计算机的内部温度,并根据温度的变化来自动调整风扇的速度,以保持计算机的散热效果和稳定运行。 软件功能 温度监测:实时监测计算机的内部温度,显示在界面上。 风扇速度控…...
推理加速新范式:火山引擎高性能分布式 KVCache (EIC)核心技术解读
资料来源:火山引擎-开发者社区 分布式 KVCache 的兴起 背景 在大模型领域,随着模型参数规模的扩大和上下文长度增加,算力消耗显著增长。在 LLM 推理过程中,如何减少算力消耗并提升推理吞吐已经成为关键性优化方向。以多轮对话场…...
2025年5月12日第一轮
1.百词斩 2.阅读 3.翻译 4.单词 radical 激进的 Some people in the US have asserted that forgiving student loan debt is one way to stimulate the economy and give assistance to those in need. 1.数学 Hainan was the second island on the Taiwan,a province whi…...
Spark目前支持的部署模式。
一、本地模式(Local Mode) 特点: 在单台机器上运行,无需集群。主要用于开发、测试和调试。所有组件(Driver、Executor)在同一个 JVM 中运行。 启动命令: bash spark-submit --master local[*]…...
如何理解“数组也是对象“——Java中的数组
在Java中,数组确实是一种特殊的对象,这一点经常让初学者感到困惑。本文将深入探讨数组的对象本质,并通过代码示例展示数组作为对象的特性。 数组是对象的证据 1. 数组继承自Object类 所有Java数组都隐式继承自java.lang.Object类ÿ…...
第二章、物理层
目录 2.1、物理层的基本概念 2.2、数据通信的基础知识 2.2.1、数据通信系统的模型 2.2.2、有关信道的几个基本概念 调制的方法 常用的编码方式 基本的带通调制 2.2.3、信道的极限容量 信道能够通过的频率范围 2.3、物理层下面的传输媒介 2.3.1、导引型传输媒体 &…...
UART16550 IP core笔记二
XIN时钟 表示use external clk for baud rate选型,IP核会出现Xin时钟引脚 XIN输入被外部驱动,也就是外部时钟源,那么外部时钟必须要满足特定的要求,就是XIN 的range范围是xin<S_AXI_CLK/2,如果不满足这个条件,那么A…...
websocketpp 安装及使用
介绍 WebSocket 是从 HTML5 开始支持的一种网页端和服务端保持长连接的消息推送机制。 传统的 web 程序都是属于 "一问一答" 的形式,即客户端给服务器发送了一个 HTTP 请求,服务器给客户端返回一个 HTTP 响应。这种情况下服务器是属于被动…...
【大数据】MapReduce 编程--WordCount
API 是“Application Programming Interface”的缩写,即“应用程序编程接口” Hadoop 提供了一套 基于 Java 的 API,用于开发 MapReduce 程序、访问 HDFS、控制作业等 MapReduce 是一种 分布式并行计算模型,主要用于处理 大规模数据集。它将…...
北京市通州区经信局对新增通过国家级生成式人工智能及深度合成算法备案企业给予100w、20w一次性补贴
北京市通州区经济和信息化局 关于发布支持北京城市副中心数字经济高质量发展的实施指南(第一批)的通知 各有关单位: 为培育千亿级数字经济产业集群,促进数字经济和实体经济深度融合,助推北京城市副中心产业高质量发展&…...
机器学习驱动的智能化电池管理技术与应用
在人工智能与电池管理技术融合的背景下,电池科技的研究和应用正迅速发展,创新解决方案层出不穷。从电池性能的精确评估到复杂电池系统的智能监控,从数据驱动的故障诊断到电池寿命的预测优化,人工智能技术正以其强大的数据处理能力…...
GTC2025——英伟达布局推理领域加速
英伟达GTC2025大会于今年3月18日举行,会上NVIDIA CEO黄仁勋展示了其过去所取得的成就,以及未来的布局目标——通过纵向扩展(scale out)和横向扩展(scale up)解决终极的计算问题——推理。本文将回顾NVIDIA在…...
5.12 note
Leetcode 图 邻接矩阵的dfs遍历 class Solution { private: vector<vector<int>> paths; vector<int> path; void dfs(vector<vector<int>>& graph, int node) { // 到n - 1结点了保存 if (node graph.size() - 1)…...
Java Spring Boot项目目录规范示例
以下是一个典型的 Java Spring Boot 项目目录结构规范示例,结合了分层架构和模块化设计的最佳实践: text 复制 下载 src/ ├── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── myapp/ │…...
记录裁员后的半年前端求职经历
普通的人生终起波澜 去年下半年应该算是我毕业以来发生人生变故最多的一段时间。 先是 7 月份的时候发作了一次急性痛风,一个人在厦门,坐在床上路都走不了,那时候真的好想旁边能有个人能扶我去医院,真的是感受到 10 级的孤独。尝…...
学习黑客BitLocker与TPM详解
BitLocker与TPM详解:数据加密的坚固堡垒 🔐🛡️ 学习目标:掌握BitLocker加密原理、TPM工作机制及其配置方法,提升数据安全防护水平 1. 数据保护的最后防线:BitLocker与TPM简介 💼 在当今世界&a…...
综合实验二之grub2密文加密
实验二、grub2密文加密 Grub2 密文加密的作用: 保护系统安全: 防止未经授权的用户在系统启动时进入 Grub2 菜单,通过修改启动参数来绕过系统的安全机制,进而访问或篡改系统文件和数据。例如,恶意用户可能试图通过修改启…...
【Java学习】Lambda表达式
目录 一、函数式匿名 1.环境确定 2.Lambda部分实现 二、函数式书写 Lambda表达式: 三、函数式接口 1.Consumer行为接口 1.1Lambda匿名实现(核心) 1.2创建使用全过程 1.2.1创建匿名子类实例 1.2.1.1环境确定 1.2.1.2匿名实现 1.2.2向上转型 1.2.3Lamb…...
精益数据分析(55/126):双边市场模式的挑战、策略与创业阶段关联
精益数据分析(55/126):双边市场模式的挑战、策略与创业阶段关联 在创业和数据分析的学习旅程中,我们持续探索不同商业模式的奥秘。今天,依旧怀揣着与大家共同进步的想法,深入研读《精益数据分析》…...
人工智能100问☞第21问:神经网络如何模拟人脑结构?
目录 一、通俗解释 二、专业解析 三、权威参考 神经网络通过分层连接的人工神经元模拟人脑结构,其中输入层接收信号(模拟树突接收信息),隐藏层通过权重调整(模拟突触可塑性)进行特征提取,输出层生成结果(类似轴突传递信号),并利用反向传播机制(类比生物神…...
Vue 3 实现转盘抽奖效果
🎡 使用 Vue 3 实现转盘抽奖效果 在移动端或营销活动中,转盘抽奖是一种非常常见的互动方式。本文基于 Vue 3 TypeScript 实现一个视觉炫酷、逻辑完整的转盘抽奖功能,并支持「指定奖品必中」的逻辑。 iShot_2025-05-12_11.31.27 ᾟ…...
Python 处理图像并生成 JSONL 元数据文件 - 灵活text版本
Python 处理图像并生成 JSONL 元数据文件 - 灵活text版本 flyfish import os import json import argparse from PIL import Image from xpinyin import Pinyinclass ImageConverter:def __init__(self, src_folder, dest_folder, target_size1024, output_format"JPEG&…...
LeRobot 项目部署运行逻辑(七)—— ACT 在 Mobile ALOHA 训练与部署
全部流程为:硬件配置 -> 环境安装 -> 遥操作数据采集 -> 数据集可视化 -> 策略训练 -> 策略评估 在之前的笔记中已经完成了绝大部分,最后再记录一下最后的训练部署,算是最简单的部分了 目录 1 ACT 训练 2 ALOHA 部署 3 更…...
【NextPilot日志移植】ULog
📚 ULog 日志系统详解 关键词:结构化日志、飞行数据记录、自描述格式、嵌入式系统、PX4、NextPilot 🧠 一、ULog 是什么? ULog(Universal Log) 是 PX4/NextPilot 飞控系统中使用的结构化日志格式ÿ…...
扩展:React 项目执行 yarn eject 后的 scripts 目录结构详解
扩展:React 项目执行 yarn eject 后的 scripts 目录结构详解 什么是 yarn eject?scripts 目录结构与说明各脚本说明说明 什么是 yarn eject? yarn eject 是 Create React App(简称 CRA)提供的一条命令,用于…...
Android11.0 framework第三方无源码APP读写断电后数据丢失问题解决
1.前言 在11.0中rom定制化开发中,在某些产品开发中,在某些情况下在App用FileOutputStream读写完毕后,突然断电 会出现写完的数据丢失的问题,接下来就需要分析下关于使用FileOutputStream读写数据的相关流程,来实现相关 功能 2.framework第三方无源码APP读写断电后数据丢…...
多样本整合Banksy空间聚类分析(Visium HD, Xenium, CosMx)
在空间数据分析中,传统的单细胞聚类算法,例如Seurat和Scanpy中的lovain和leiden等聚类算法,通常在处理空间数据时忽略了空间信息。然而,由于细胞状态受其周围细胞的影响,将转录组数据与细胞的空间信息结合起来进行聚类…...
【2025最新】Vm虚拟机中直接使用Ubuntu 免安装过程直接使用教程与下载
Ubuntu 是一个基于 Debian 的自由开源 Linux 操作系统,面向桌面、服务器和云计算平台广泛应用。 由英国公司 Canonical Ltd. 维护和发布,Ubuntu 强调易用性、安全性和稳定性,适合个人用户、开发者以及企业部署使用。 Ubuntu 默认使用 GNOME …...
【Leetcode】系列之206反转链表
反转链表 题目描述解决思路过程示例代码示例结果展示 总结 题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 解决思路 next_node:临时存放当前指针指向下一个指针的变量;pre:存放空指针;curr࿱…...
图灵爬虫练习平台第十九题js逆向
题十九:法外狂徒 该题适合JS逆向学习的小伙伴练习,模拟国内某大型网站 数据加密设计,给大家练练手 还是先f12看看是什么加密,发现是 返回数据最后加密了 还是先堆栈分析一下,直接点进去 打上断点分析一下,…...
Ubuntu 22初始配置(root、ssh)
1.设置root密码 并启用root用户 sudo passwd root sudo passwd -u root 2.安装ssh apt install openssh-server systemctl enable --now ssh 3.支持root通过ssh登录 vim /etc/ssh/sshd_config 是sshd_config(服务端) 不是ssh_config(客户端) 最后增加一…...
css3响应式布局
css3响应式布局 响应式设计是现代网页开发的重要组成部分,它确保网页在不同的屏幕尺寸上都有良好的显示效果。 在CSS中,实现响应式布局是一种常用的技术,旨在使网页能够根据用户的设备和屏幕尺寸自动调整其布局和样式。这种技术对于确保网站…...
【DeepSeek问答记录】请结合实例,讲解一下pytorch的DataLoader的使用方法
PyTorch的DataLoader是数据加载的核心工具,可高效处理批量数据、并行加载和自动打乱。以下是一个结合实例的分步讲解: 1. 基础使用流程 import torch from torch.utils.data import Dataset, DataLoader# 自定义数据集类(必须实现__len__和…...
Codeforces Round 1024 (Div. 2)(A-D)
题面链接:Dashboard - Codeforces Round 1024 (Div. 2) - Codeforces A. Dinner Time 思路 一共n个数被分成n/p个区间,每个区间内的和是q,如果还有除构成区间外剩余的数那么就一定能构造,如果没有剩余就看所有区间的和是否等于…...
大语言模型强化学习双强:OpenRLHF与verl技术解析
引言 随着大语言模型(LLM)参数规模突破千亿级,如何高效完成基于人类反馈的强化学习(RLHF)训练成为行业焦点。OpenRLHF与verl作为开源社区两大标杆框架,分别以Ray分布式架构和HybridFlow混合控制器为核心&a…...
ARM Cortex-M3内核详解
目录 一、ARM Cortex-M3内核基本介绍 (一)基本介绍 (二)主要组成部分 (三)调试系统 二、ARM Cortex-M3内核的内核架构 三、ARM Cortex-M3内核的寄存器 四、ARM Cortex-M3内核的存储结构 五、ARM Co…...
关于高并发GIS数据处理的一点经验分享
1、背景介绍 笔者过去几年在参与某个大型央企的项目开发过程中,遇到了十分棘手的难题。其与我们平常接触的项目性质完全不同。在一般的项目中,客户一般只要求我们能够通过桌面软件对原始数据进行加工处理,将各类地理信息数据加工处理成地图/场景和工作空间,然后再将工作空…...
vue3+flask+sqlite前后端项目实战
基础环境安装 pycharm 下载地址: https://www.jetbrains.com/zh-cn/pycharm/download/?sectionwindows vscode 下载地址 https://code.visualstudio.com/docs/?dvwin64user python 下载地址 https://www.python.org/downloads/windows/ Node.js(含npm…...
支付宝API-SKD-GO版
前言 支付宝api的sdk没有提供go版,这里自己封装了一个go版的sdk,有需要的朋友可以自取使用 支付宝 AliPay SDK for Go, 集成简单,功能完善,持续更新,支持公钥证书和普通公钥进行签名和验签。 安装 go get github.c…...
uniapp(微信小程序)>关于父子组件的样式传递问题(自定义组件样式穿透)
由于"微信小程序"存在【样式隔离机制】,且默认设置为isolated(启用样式隔离),因此这里给出以下两种解决方案: 注意: 这2种方案父子组件<style>标签不能添加"scoped" 1.CSS变量穿透(推荐: 此方案不受样…...
AI时代还需要目视解译吗?——目视解译详解
在遥感技术迅猛发展的今天,尽管计算机自动解译算法层出不穷,目视解译仍然保持着其基础性和权威性的地位。作为遥感信息提取的"黄金标准",目视解译凭借人类认知系统的独特优势,在多个专业领域持续发挥着不可替代的作用。…...
苹果电脑笔记本macos Mac安装mixly 米思齐软件详细指南
一、下载安装包 二、安装 1、解压下载的文件,然后将解压后文件夹中的中文名称部分删掉只保留英文名称,例如:mixly2.0-mac 2、将mixly2.0-mac文件夹移动到当前用户的Documents路径下,注意路径中不要有中文。 3、进入mixly2.0-mac文…...
slackware系统详解
Slackware 是最古老的活跃维护的 Linux 发行版之一,由 Patrick Volkerding 于 1993 年创建。它以简洁性、稳定性和遵循 Unix 哲学为核心理念,适合追求高度控制和手动配置的用户。以下是 Slackware 的详细介绍: 1. 核心特点 简洁性 (Simplici…...
力扣210(拓扑排序)
210. 课程表 II - 力扣(LeetCode) 这是一道拓扑排序的模板题。简单来说,给出一个有向图,把这个有向图转成线性的排序就叫拓扑排序。如果有向图中有环就没有办法进行拓扑排序了。因此,拓扑排序也是图论中判断有向无环图…...
Promise/A+ 规范中文解读
一、简介 Promise/A 是一个开放、健全且通用的JavaScript Promise标准,由开发者制定并供开发者参考。其核心目标是定义then方法的行为,确保不同Promise实现的互操作性。规范聚焦于异步操作的最终结果交互机制,而非Promise的创建、解决或拒绝…...
多媒体预研
主要包含h265 av1 等各种 多媒体的具体应用 svac_plugin ZLMediaKit/ext-codec at master cyf88/ZLMediaKit D:\java\xiachu\otherzlm\ZLMediaKit> sip-client GB28181-Service/SipClient at master Washington-DC/GB28181-Service yolo Jackson-Tan/wvp_pro_yolo: 小…...
动态网站 LNMP
一、名词解释: LNMP: L : 代表 Linux 操作系统,为网站提供了可靠的运行环境N : 代表 Nginx,它是一款轻量级的高性能 Web 服务器,能够快速处理大量并 发连接,有效提升网站的访问速度和性能 M : 代表…...
【Leetcode刷题随笔】349. 两个数组的交集
1. 题目描述 给定两个数组nums1和nums2,返回它们的交集。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。 示例1: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出:[2] 题目条件: 1 < nums1.length, nums2.length < 10…...
如何优雅的使用CMake中的FindPkgConfig模块
背景 如果你遇到下面的场景,那么FindPkgConfig模块可以用来解决我们引用上游库的问题。 上游库没有提供CMake的配置文件。CMake没有提供相应的查找模块,即Find<PackageName>.cmake的文件。上游库提供了pkg-config使用的.pc文件。 如果上面三个条…...