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

Linux 的信号机制

 

目录

一、信号机制概述

二、常见信号类型及含义

三、信号的产生方式

1.用户操作产生信号

2.系统调用产生信号

3.硬件异常产生信号

四、信号的处理方式 

1.默认处理

2.忽略信号

3.自定义处理函数

五、信号处理流程深入剖析

六、信号机制的应用场景与优势

七、总结 


一、信号机制概述

在 Linux 系统中,信号是一种进程间通信(IPC)的异步通知机制,用于通知进程发生了特定的事件。它就像是一种软件中断,进程在执行过程中收到信号时,可以暂停当前的操作,转而执行相应的信号处理代码,处理完后再返回原来的执行点继续执行。信号可以由多种原因产生,比如用户的操作(如按下 Ctrl+C)、硬件异常(如非法内存访问)、系统调用(如 kill() 函数)等。

二、常见信号类型及含义

  • SIGINT(2):通常由用户在终端按下 Ctrl+C 组合键产生,用于终止当前正在运行的进程。
  • SIGTERM(15):一种较为“温和”的终止信号,进程收到此信号后可以进行一些清理工作后再退出,是系统正常关闭进程时常用的信号。
  • SIGKILL(9):强制终止进程,进程无法捕获或忽略该信号,常用于在进程无响应或出现严重错误时,强制结束进程,保证系统的稳定性。
  • SIGHUP(1):当控制终端关闭时,进程会收到这个信号。常用于守护进程,通知其重新读取配置文件,以实现动态配置更新。
  • SIGSEGV(11):当进程进行了无效的内存访问,如访问未分配的内存、越界访问数组等,就会产生该信号,通常表示程序出现了严重的错误。
  • SIGFPE(8):在进程执行了非法的算术运算,如除零操作时,会触发此信号。

三、信号的产生方式

1.用户操作产生信号

如前所述,用户在终端按下 Ctrl+C 发送 SIGINT 信号,按下 Ctrl+\ 发送 SIGQUIT 信号,这些信号会被发送到前台进程组中的所有进程,进程收到信号后根据其处理方式做出响应。

2.系统调用产生信号

  • kill() 函数:pid_t kill(pid_t pid, int sig); ,其中 pid 为目标进程 ID,sig 为要发送的信号编号。例如,kill(getpid(), SIGTERM); 会向当前进程发送 SIGTERM 信号,进程会执行相应的终止流程(如果没有自定义处理该信号)。
  • raise() 函数:int raise(int sig); ,用于进程给自己发送信号,例如 raise(SIGABRT); 会使进程产生 SIGABRT 信号,通常用于程序主动报错并终止执行,方便调试。

3.硬件异常产生信号

当进程访问无效的内存地址时,硬件会检测到这个错误,并通知内核,内核则向进程发送 SIGSEGV 信号。例如,以下代码会产生 SIGSEGV 信号:

#include <stdio.h>
int main() {int *ptr = NULL;*ptr = 10;  // 试图向空指针指向的地址写入数据,会产生段错误,触发 SIGSEGV 信号return 0;
}

四、信号的处理方式 

1.默认处理

进程对大多数信号都有默认的处理行为。例如,对于 SIGTERM 信号,默认是终止进程;对于 SIGFPE 信号,默认是打印错误信息并终止进程。这种默认处理机制确保了系统在遇到常见错误或用户请求时能够采取合理的措施来维持系统的稳定性和正确性。

2.忽略信号

进程可以使用 signal() 函数将某些信号的处理方式设置为忽略。例如:signal(SIGINT, SIG_IGN); 会使进程忽略 SIGINT 信号(通常由 Ctrl+C 产生),进程在收到该信号时将不会有任何反应,继续执行原来的操作。但需要注意的是,SIGKILL 和 SIGSTOP 信号不能被忽略,这是为了保证系统对进程的基本控制能力。

3.自定义处理函数

通过 signal() 或更推荐的 sigaction() 函数,进程可以注册自己的信号处理函数。例如:

#include <stdio.h>
#include <signal.h>
// 自定义的信号处理函数
void sig_handler(int signum) {printf("Received signal %d\n", signum);// 这里可以添加更多针对该信号的处理逻辑
}
int main() {// 使用 signal 函数注册 SIGINT 信号的处理函数if (signal(SIGINT, sig_handler) == SIG_ERR) {perror("signal");return 1;}while(1) {printf("Running...\n");sleep(1);}return 0;
}

在上述代码中,当进程运行时,按下 Ctrl+C 会触发 SIGINT 信号,此时进程不会像默认情况那样终止,而是会执行自定义的 sig_handler 函数,打印出收到的信号编号,然后继续循环执行。

五、信号处理流程深入剖析

当一个信号产生时,内核首先会检查目标进程对该信号的阻塞情况。如果信号没有被阻塞,内核会将其标记为待处理状态,并将其添加到进程的信号队列中(如果进程注册了针对该信号的处理函数或者采用默认处理方式)。当进程从内核态返回用户态时,会检查是否有未处理的信号。如果存在未处理信号,进程会根据信号的处理方式进行相应操作:

  • 若为默认处理,内核会执行预先定义好的默认动作,如终止进程、暂停进程等。
  • 若进程注册了自定义处理函数,内核会将程序的执行流程切换到自定义函数的入口地址,执行用户定义的处理代码。在处理函数执行完毕后,进程会根据具体情况返回原来的执行点(如果是可重入函数)或者执行其他预定的恢复操作,继续正常执行后续的指令。
  • 若信号被设置为忽略,内核会直接跳过该信号的处理,进程继续执行其当前的指令序列,就好像没有收到该信号一样。

 

六、信号机制的应用场景与优势

  1. 进程间协作:在多进程编程中,父进程和子进程可以通过信号来进行简单的协作。例如,父进程可以发送信号通知子进程执行某些特定的任务,或者子进程在完成任务后通过信号向父进程报告状态,实现一种轻量级的进程间通信方式,避免了复杂的管道、消息队列等 IPC 机制的开销。
  2. 错误处理与资源清理:当进程遇到错误情况,如内存不足、文件读取错误等,内核可以向进程发送相应的信号(如 SIGABRT 或自定义的错误信号),进程可以在信号处理函数中进行资源清理工作,如关闭打开的文件、释放动态分配的内存等,防止资源泄漏,提高系统的稳定性和健壮性。
  3. 系统事件响应:对于系统中的一些事件,如终端关闭、系统关机等,内核通过发送特定的信号(如 SIGHUP、SIGTERM 等)通知相关进程,进程可以及时做出响应,保存数据、关闭连接等,确保系统能够平稳地进行状态转换和关机操作,提升用户体验和系统的可靠性。

七、总结 

Linux 信号机制作为操作系统内核与进程之间的重要通信手段,为系统的稳定运行、进程间的协作以及错误处理提供了高效、灵活的方式。深入理解信号机制的原理、产生方式、处理流程以及应用场景,对于开发高质量、健壮的 Linux 应用程序具有至关重要的意义,能够帮助开发者更好地利用系统资源,优化程序行为,提高系统的整体性能和可靠性。

相关文章:

Linux 的信号机制

目录 一、信号机制概述 二、常见信号类型及含义 三、信号的产生方式 1.用户操作产生信号 2.系统调用产生信号 3.硬件异常产生信号 四、信号的处理方式 1.默认处理 2.忽略信号 3.自定义处理函数 五、信号处理流程深入剖析 六、信号机制的应用场景与优势 七、总结 一、…...

国内独立开发者案例及免费送独立开发蓝图书

独立开发者在国内越来越受到关注&#xff0c;他们追求的是一种自由且自给自足的工作状态。 送这个&#xff1a; 少楠light&#xff08;Flomo、小报童、如果相机&#xff09;&#xff1a;他们是独立开发者的典范&#xff0c;不仅开发了多款产品&#xff0c;还坚信“剩者为王”…...

以太网(Ethernet)和无线局域网(Wireless Local Area Network, WLAN)

当然&#xff0c;下面我将详细介绍以太网&#xff08;Ethernet&#xff09;和无线局域网&#xff08;Wireless Local Area Network, WLAN&#xff09;&#xff0c;包括它们的定义、技术标准、优缺点以及应用场景等方面。 一、以太网&#xff08;Ethernet&#xff09; 1. 定义…...

大模型-ChatGLM2-6B模型部署与微调记录

大模型-ChatGLM2-6B模型部署与微调记录 模型权重下载&#xff1a; 登录魔塔社区&#xff1a;https://modelscope.cn/models/ZhipuAI/chatglm2-6b 拷贝以下代码执行后&#xff0c;便可快速权重下载到本地 # 备注&#xff1a;最新模型版本要求modelscope > 1.9.0 # pip insta…...

Web防火墙和下一代防火墙的区别

介绍 客户经常询问“当我已经拥有下一代防火墙&#xff08;NGFW&#xff09;时&#xff0c;为什么需要Web应用程序防火墙&#xff08;WAF&#xff09;&#xff1f;”。本博文的目的是解释两种解决方案之间的区别&#xff0c;重点关注Web应用程序防火墙可以提供的附加值。 什么…...

Yocto 项目中的交叉编译:原理与实例

Yocto 项目是一个强大的工具集&#xff0c;它专注于为嵌入式系统生成定制的 Linux 发行版。交叉编译在 Yocto 项目中扮演着核心角色&#xff0c;它使得开发者能够在功能强大的宿主机上构建适用于资源受限目标设备的软件系统。这篇文章将从运行原理、实际案例和工具链组成等角度…...

从安全角度看 SEH 和 VEH

从安全角度看 SEH 和 VEH 异常处理程序是处理程序中不可预见的错误的基本方法之一 https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/exceptions/ SEH——结构化异常处理程序 就其工作方式而言&#xff0c;异常处理程序与其他处理程序相比相当基础&#xff0…...

【多维DP】力扣3366. 最小数组和

给你一个整数数组 nums 和三个整数 k、op1 和 op2。 你可以对 nums 执行以下操作&#xff1a; 操作 1&#xff1a;选择一个下标 i&#xff0c;将 nums[i] 除以 2&#xff0c;并 向上取整 到最接近的整数。你最多可以执行此操作 op1 次&#xff0c;并且每个下标最多只能执行一…...

钉钉h5微应用,鉴权提示dd.config错误说明,提示“jsapi ticket读取失败

这个提示大多是因为钉钉服务器没有成功读取到该企业的jsticket数据 1. 可能是你的企业corpid不对 登录钉钉管理后台 就可以找到对应企业的corpid 请严格使用这个corpid 。调用获取jsapi_ticket接口&#xff0c;使用的access_token对应的corpid和dd.config中传递的corpid不一致…...

Linux系统之tree命令的基本使用

Linux系统之tree命令的基本使用 一、tree命令介绍二、tree工具安装三、tree命令帮助3.1 查询帮助信息3.2 tree命令帮助解释 四、tree命令的基本使用4.1 直接使用4.2 *限制显示的层级4.3 仅显示目录4.4 不显示隐藏文件4.5 显示文件大小4.6 彩色输出4.7 输出到文件4.8 输出不同格…...

PyTorch框架——基于深度学习LYT-Net神经网络AI低光图像增强系统源码

第一步&#xff1a;LYT-Net介绍 本文介绍了LYT-Net&#xff0c;即轻量级YUV Transformer 网络&#xff0c;作为一种新的低光图像增强方法。所提出的架构与传统的基于Retinex的模型不同&#xff0c;它利用YUV颜色空间对亮度&#xff08;Y&#xff09;和色度&#xff08;U和V&…...

【AI学习】DeepSeek-V3 技术报告学习:总体架构

翻了一下DeepSeek-V3 技术报告学习&#xff0c;太长&#xff0c;只是大概翻了一下&#xff0c;其中Multi-Token Prediction的技术就很亮眼。 摘要 本文介绍了DeepSeek-V3&#xff0c;这是一个拥有671B总参数的强大混合专家&#xff08;MoE&#xff09;语言模型&#xff0c;每…...

PyTorch快速入门

文章目录 前言简介软件包导入创建张量类型操作索引直接索引切片索引 维度变换增加维度删除维度维度重复维度交换broadcast合并张量拆分张量运算最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;今天分享一下PyTorch的基本使用的快速入门教程&#xff0c;希望能够帮助各位快…...

GCP Cloud Observability 是什么,有什么使用场景

GCP Cloud Observability 是 Google Cloud Platform (GCP) 提供的一组工具和服务&#xff0c;用于监控、日志记录、追踪和调试应用程序和基础设施的健康和性能。通过收集和分析遥测数据&#xff08;如指标、日志和追踪信息&#xff09;&#xff0c;Cloud Observability 有助于理…...

OpenCV相机标定与3D重建(35)计算两幅图像之间本质矩阵(Essential Matrix)的函数findEssentialMat()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 从两幅图像中的对应点计算本质矩阵。 cv::findEssentialMat 是 OpenCV 库中用于计算两幅图像之间本质矩阵&#xff08;Essential Matrix&#xf…...

计算机毕业设计Hadoop+Spark美团美食推荐系统 美团餐厅推荐系统 美团推荐系统 美食价格预测 美团爬虫 美食数据分析 美食可视化大屏

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

【探花交友】SpringCache

目录 通用缓存SpringCache 重要概念 导入依赖 开启缓存支持 编写UserInfoService 缓存Cacheable 发布视频清空缓存 通用缓存SpringCache 实现缓存逻辑有2种方式&#xff1a; 每个接口单独控制缓存逻辑 统一控制缓存逻辑Spring从3.1开始定义了org.springframework.cac…...

链表 之 无头结点【哨兵位】单向非循环链表【单链表】增删改查 等方法

系列文章目录 &#x1f388; &#x1f388; 我的CSDN主页:OTWOL的主页&#xff0c;欢迎&#xff01;&#xff01;&#xff01;&#x1f44b;&#x1f3fc;&#x1f44b;&#x1f3fc; &#x1f389;&#x1f389;我的C语言初阶合集&#xff1a;C语言初阶合集&#xff0c;希望能…...

2001年对墨西哥湾流进行的主动荧光测量数据

目录 简介 摘要 代码 引用 网址推荐 知识星球 机器学习 干旱监测平台 Active fluorescence measurements in the Gulf Stream in 2001 简介 "Active fluorescence measurements in the Gulf Stream in 2001"是指在2001年对墨西哥湾流进行的主动荧光测量。这…...

AtCoder Beginner Contest 386

1.D - Diagonal Separation 赛时一直卡在这道题,知道思路但不知道怎么解决,就是说若存在给定的白色方块出现在某个B方块与源点构成的区域内就无法实现&#xff0c;如果数据是1000则可以通过离散化 二维差分来解决,赛时一直在试图通过树状数组&#xff0c;线段树来解决&#x…...

Ajax总结

引言 这是属于前端的部分了&#xff0c;先是学习了三件套&#xff08;HTML,JS,CSS没怎么学&#xff0c;但是大概能理解&#xff09;之后就开始学习这个了&#xff0c;学习之前应该要知道她是做什么的&#xff0c;但是我没有做这一步&#xff0c;之后会先了解为什么要学习这门技…...

Springboot使用外置的Servlet容器

嵌入式Servlet容器&#xff1a;应用打成可执行的jar 优点&#xff1a;简单、便携 缺点&#xff1a;默认不支持JSP、优化定制比较复杂 外置的Servlet容器&#xff1a;外面安装Tomcat---应用war包的方式打包 一.嵌入式tomcat启动项目步骤&#xff1a; 1.创建一个普通maven项目…...

金仓数据库物理备份和还原

差异备份&#xff1a;是复制上次全备份以来所有变更数据的一种备份。 增量备份&#xff1a;没有重复的备份数据&#xff0c;备份的数据量不大&#xff0c;备份所需的时间很短&#xff0c;备份速度快 考点 sys_rman工具&#xff08;必考&#xff09; 配置 sys_backup.conf 初…...

Python提取字符串中的json,时间,特定字符

1.整个字符串为json s{"time":"2014-10-14 12:00", "tid":12, "info_message":"我爱python"} _jsonjson.loads(s) print(_json) 执行结果&#xff1a; {time: 2014-10-14 12:00, tid: 12, info_message: 我爱python} 2…...

Android `android.graphics.drawable` 包深度解析:架构与设计模式

Android android.graphics.drawable 包深度解析:架构与设计模式 目录 引言Drawable 概述Drawable 的架构 Drawable 类层次结构Drawable 的核心方法Drawable 的设计模式 装饰者模式工厂模式状态模式常用 Drawable 子类解析 BitmapDrawableShapeDrawableLayerDrawableStateList…...

从提示词到共振:李继刚的AI沟通法则

摘要&#xff1a;在极客公园的演讲中&#xff0c;李继刚分享了他对提示词的深入研究&#xff0c;提出了通过场域和共振达到与AI深层次交流的策略。他分析了AI的存在属性&#xff0c;指出未来提示词将因AI进化而变得更为简洁和高效。 一、Prompt思考与总结 本文内容大多是源于…...

Redis字符串底层结构对数值型的支持常用数据结构和使用场景

字符串底层结构 SDS (Simple Dynamic Strings) 是 Redis 中用于实现字符串类型的一种数据结构。SDS 的设计目标是提供高效、灵活的字符串操作&#xff0c;同时避免传统 C 字符串的一些缺点。 struct sdshdr {int len; // 已使用的长度int free; // 未使用的长度char bu…...

Windows下Python+PyCharm的安装步骤及PyCharm的使用

Windows下PythonPyCharm的安装步骤及PyCharm的使用 文章目录 Windows下PythonPyCharm的安装步骤及PyCharm的使用一、Python的安装&#xff08;1&#xff09;环境准备&#xff08;2&#xff09;Python安装&#xff08;3&#xff09;pip组件的安装 二、PyCharm的安装&#xff08;…...

oracle基础:中文字段排序详解

在数据库操作中&#xff0c;中文字段排序是一个常见但又容易被忽视的问题。默认情况下&#xff0c;Oracle 数据库的排序规则是基于 Unicode 编码的&#xff0c;这可能导致排序结果并不符合预期&#xff0c;比如按拼音、部首或笔画排序。本文将详细解析如何在 Oracle 中实现中文…...

网络安全专有名词详解_3

80.WAF 即为Web Application Firewall&#xff0c;即Web应用防火墙&#xff0c;通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。 81.SOC Security Operations Center&#xff0c;翻译为安全运行中心&#xff0c;通过建立一套实时的资产风险模型&a…...

【C语言】库函数常见的陷阱与缺陷(三):内存分配函数[2]--calloc

C语言中的calloc函数是一个用于分配多个具有相同大小的内存块的函数,它在动态内存管理中扮演着重要角色。然而,在使用calloc时也存在一些陷阱与缺陷。 一、功能与常见用法 calloc(contiguous allocation)函数用于动态分配内存,相较于 malloc 函数,不仅能够在堆上为程序…...

CKA认证 | Day7 K8s存储

第七章 Kubernetes存储 1、数据卷与数据持久卷 为什么需要数据卷&#xff1f; 容器中的文件在磁盘上是临时存放的&#xff0c;这给容器中运行比较重要的应用程序带来一些问题。 问题1&#xff1a;当容器升级或者崩溃时&#xff0c;kubelet会重建容器&#xff0c;容器内文件会…...

.net core 的数据库编程

Python基础 Python是一种高级编程语言&#xff0c;由Guido van Rossum于1980年代后期发明&#xff0c;并于1991年首次发布。它以简洁的语法和易于阅读的代码风格著称&#xff0c;因而成为程序员和数据科学家等领域的热门选择。在这篇文章中&#xff0c;我们将深入探讨Python的…...

再生核希尔伯特空间(RKHS)上的分位回归

1. 基本定义和理论基础 1.1 再生核希尔伯特空间(RKHS) 给定一个非空集合 X \mathcal{X} X&#xff0c;一个希尔伯特空间 H \mathcal{H} H 称为再生核希尔伯特空间&#xff0c;如果存在一个函数 K : X X → R K: \mathcal{X} \times \mathcal{X} \rightarrow \mathbb{R} K…...

结构方程模型【SEM】:非线性、非正态、交互作用及分类变量分析

利用结构方程模型建模往往遇到很多‘特殊’情况&#xff1a;1&#xff09;变量间为非直线关系&#xff1b;2&#xff09;变量间存在交互作用&#xff1b;3&#xff09;数据不满足正态分布&#xff1b;4&#xff09;变量为非正态类型的数值变量&#xff0c;如0&#xff0c;1数据…...

不安全物联网的轻量级加密:综述

Abstract 本文综述了针对物联网&#xff08;IoT&#xff09;的轻量级加密解决方案。这项综述全面覆盖了从轻量级加密方案到不同类型分组密码的比较等多个方面。同时&#xff0c;还对硬件与软件解决方案之间的比较进行了讨论&#xff0c;并分析了当前最受信赖且研究最深入的分组…...

DeepSpeed 使用 LoRA 训练后文件结构详解

DeepSpeed 使用 LoRA 训练后文件结构详解 在大语言模型&#xff08;LLM&#xff09;的训练过程中&#xff0c;DeepSpeed 提供了强大的分布式训练能力&#xff0c;而 LoRA&#xff08;Low-Rank Adaptation&#xff09;通过参数高效微调技术显著减少了资源占用。完成训练后&…...

Mysql数据 新增、修改和删除操作时,这些变化如何被转换为Kafka消息?

Mysql数据 新增、修改和删除操作时,这些变化如何被转换为Kafka消息? 为了在FlinkCDC中配置MySQL同步到Kafka,并采用debezium-json数据格式,我们需要了解当执行新增、修改和删除操作时,这些变化如何被转换为Kafka消息。下面我们将详细介绍这些变化情况,并提供具体的数据样…...

高等数学 8.1向量及其线性运算

8.1 向量及其线性运算 文章目录 8.1 向量及其线性运算一、向量的概念向量的线性运算1.向量的加减法2.向量与数的乘法 三、空间直角坐标系四、利用坐标作向量的线性运算五、向量的模、方向角、投影1.向量的模与两点间的距离公式2.方向角与方向余弦3.向量在轴上的投影 一、向量的…...

向bash shell脚本传参

例子&#xff1a; ~ script % touch parameter.sh ~ script % chmod 755 parameter.sh ~ % vim parameter.shparameter.sh: #!/usr/bin/env bashecho the name of current script is $0echo the first parameter is $1echo the second parameter is $2echo all parameters: $…...

高精度算法:加减乘除 (学习笔记)

加法&#xff1a; 现有vector<int>a,b;并且已经输入了内容且倒置 vector<int> plus(vector<int>a,vector<int> b){ int as a.size(); int bs b.size(); vector<int>total; int carry 0; int ar 0, br 0; //读取位数 while (ar < as &am…...

JVM 主要组成部分与内存区域

一、JVM 主要组成部分&#xff1a; JVM的主要包含两个组件和两个子系统&#xff0c;分别为&#xff1a; &#xff08;1&#xff09;本地库接口(Native Interface)&#xff1a;与native lib(本地方法库)交互&#xff0c;融合其他编程语言为Java所用&#xff0c;是与其它编程语言…...

10分钟掌握项目管理核心工具:WBS、甘特图、关键路径法全解析

一、引言 在项目管理的广阔天地里&#xff0c;犹如一场精心编排的交响乐演奏&#xff0c;每个乐器、每个音符都需精准配合才能奏响美妙乐章。而 WBS&#xff08;工作分解结构&#xff09;、甘特图、关键路径法无疑是这场交响乐中的关键乐章&#xff0c;它们从不同维度为项目管…...

python语音机器人(青云客免费api)

强调&#xff1a;不用登录注册&#xff0c;直接使用就好 青云客智能聊天机器人API python代码&#xff0c;直接可以运行&#xff1a; 1、安装库&#xff1a; pip install requests pyttsx3 SpeechRecognition sounddevice numpy scipy2、完整代码&#xff1a; import request…...

策略模式以及优化

使用场景 在一个条件语句中又包含了多个条件语句 具体策略类会过多 把抽象策略和具体策略放在一个枚举类里。 方法 exe() 相当于抽象策略&#xff0c;而A和B就相当于实现了抽象策略的具体策略 这样就只需要一个枚举类就可以解决具体策略类过多的问题 public enum Strategy {A{O…...

解决tomcat双击startup.bat乱码的几种方法

新环境&#xff0c;win10&#xff0c;今天下载了tomcat9.0.98&#xff0c;是压缩绿色版的&#xff0c;解压缩安装到了&#xff1a; D:\java\apache-tomcat-9.0.98 可以通过‪D:\java\apache-tomcat-9.0.98\bin\startup.bat双击来启动tomcat。 但是日志显示乱码。 后来找到了几种…...

计算机网络 (12)物理层下面的传输媒体

前言 计算机网络物理层下面的传输媒体是计算机网络设备之间的物理通路&#xff0c;也称为传输介质或传输媒介&#xff0c;并不包含在计算机网络体系结构中&#xff0c;而是处于物理层之下。 一、传输媒体的分类 导向型媒体&#xff1a;电磁波被导引沿着固体媒体传播。常见的导向…...

Spark生态圈

Spark 主要用于替代Hadoop中的 MapReduce 计算模型。存储依然可以使用 HDFS&#xff0c;但是中间结果可以存放在内存中&#xff1b;调度可以使用 Spark 内置的&#xff0c;也可以使用更成熟的调度系统 YARN 等。 Spark有完善的生态圈&#xff1a; Spark Core&#xff1a;实现了…...

如何计算相位差

如何计算相位差 假设我们有两个同频率的正弦信号&#xff1a; 这里两个信号的角频率w2πf是相同的&#xff0c;根据同频正弦信号相位差的计算方法&#xff0c;直接用两个信号的相位相减。 再来看利用波形图计算相位差的例子&#xff1a; 另一种计算方式&#xff1a;...

Bash Shell知识合集

1. chmod命令 创建一个bash shell脚本 hello.sh ~script $ touch hello.sh脚本创建完成后并不能直接执行&#xff0c;我们要用chmod命令授予它可执行的权限&#xff1a; ~script $ chmod 755 hello.sh授权后的脚本可以直接执行&#xff1a; ~script $ ./hello.sh2.指定运行…...