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

Linux —— 信号初识

Linux —— 信号初识

  • 什么是信号
  • 测试几个信号
  • signal函数
      • 函数原型
      • 参数说明
      • 返回值
      • 注意事项
      • 示例
  • 后台程序
  • 前台转后台
  • 检测输入
    • 中断向量表

我们今天来继续学习Linux的内容,今天我们要了解的是Linux操作系统中的信号:

什么是信号

信号是操作系统内核与进程之间进行异步通信的一种机制,它允许系统或进程向另一个进程发送简短的控制信息,以通知进程有特定的事件发生或要求进程采取某种行动信号是软中断,意味着它们是由软件生成的,并非直接由硬件触发。以下是Linux信号的一些关键概念:

  1. 信号的来源
  • 内核: 内核可以因各种事件自动发送信号给进程,如进程试图执行非法指令、访问无效内存地址、用户按下Ctrl+C终止进程等。
  • 进程: 进程可以通过系统调用kill()向自己或其他进程发送信号。
  • 终端: 用户在终端上执行操作,如按下Ctrl+C或Ctrl+Z,也会导致内核向前台进程发送信号SIGINT(中断)或SIGTSTP(停止)。
  • 硬件: 尽管信号主要由软件生成,某些硬件异常(如断电)也可以间接触发信号。
  1. 信号的目的

    • 通知事件: 信号用来告知进程某些状态变化或事件的发生,如子进程结束、定时器到期等。
    • 控制进程行为: 信号可以请求进程采取特定动作,比如终止、暂停、继续执行或调整优先级等。
  2. 信号的处理方式

    • 默认动作: 每个信号都有一个默认的行为,如SIGINT通常会导致进程终止。
    • 忽略: 进程可以选择忽略某些信号,即不对信号做出反应。
    • 自定义处理: 进程可以定义自己的信号处理函数,通过signal()sigaction()系统调用来指定信号的处理方式。
  3. 信号掩码和阻塞

    • 进程可以设置信号掩码来暂时阻止(阻塞)某些信号的传递,直到进程解除阻塞。
  4. 常见信号:

    • SIGINT (2): 当用户按下Ctrl+C时发送,通常用于中断进程。
    • SIGTERM (15): 用来请求进程正常终止。
    • SIGHUP (1): 挂起信号,通常在终端挂断时发送给与之相连的进程。
    • SIGKILL (9): 不能被忽略或阻塞,用于强制结束进程。
    • SIGSTOP (19): 停止进程,不能被捕获或忽略。

我们可以用kill -l来查看所有的信号:
在这里插入图片描述这里我们来看几个比较重要的:

  1. SIGHUP (1) - 挂起信号
    当终端线路挂断时发送给控制终端所属的进程组。通常用于通知进程配置文件可能已更改,需要重新加载。守护进程经常捕获此信号以实现优雅重启。
  2. SIGINT (2) - 中断信号
    当用户按下Ctrl+C时产生,请求进程中断当前操作并退出。默认情况下会导致进程终止。
  3. SIGQUIT (3) - 退出信号
    类似于SIGINT,但通常伴随着生成核心转储(core dump),用于调试。在终端下,通常是Ctrl+\ 发送此信号。
  4. SIGKILL (9) - 强制终止信号
    不能被捕获、忽略或阻塞,用于立即结束进程。当其他手段无法终止进程时使用。
  5. SIGTERM (15) - 终止信号
    一种温和的请求进程终止的信号,进程可以注册处理函数来自定义清理操作。是结束进程的首选方式。
  6. SIGSEGV (11) - 段错误信号
    当进程尝试访问不允许其访问的内存段时发送,通常指示程序中的内存访问错误。
  7. SIGALRM (14) - 闹钟信号
    与定时器相关联,当设定的定时器超时时发送。常用于实现定时任务或超时检测。
  8. SIGCHLD (17) - 子进程状态改变信号
    父进程接收到此信号,表明其子进程已经终止或停止。用于监控子进程状态并回收资源。
  9. SIGSTOP (19) - 停止信号
    强制进程停止执行。不能被忽略或被捕获,类似于暂停键,常用于调试。
  10. SIGCONT (18) - 继续执行信号
    使被SIGSTOP停止的进程恢复执行。通常配合SIGSTOP使用,用于控制进程的暂停与继续。
  11. SIGUSR1 和 SIGUSR2 (10, 31) - 用户自定义信号
    这两个信号留给用户自定义用途,可以用于进程间通信或触发特定的处理逻辑。

这些信号在系统编程中扮演着关键角色,理解它们有助于编写更稳定、可维护的代码,尤其是在需要处理进程间通信、异常情况或实现特定行为的场景中。

测试几个信号

我们创建一个cc文件:

#include<iostream>
#include<unistd.h>
using namespace std;int main()
{while(true){cout << "running process ..." << endl;sleep(1);}
}

我们用g++编译,运行一下:
在这里插入图片描述
我们**Ctrl+C**可以终止进程:
在这里插入图片描述
同时,我们重新运行,另开一个窗口:
在这里插入图片描述
我们也可以使用信号3:
在这里插入图片描述或者Ctrl + \
在这里插入图片描述

signal函数

为了验证Ctrl + C信号2是否是同一件事情,我们可以利用signal来验证:
在这里插入图片描述
在Linux中,signal()函数是一个用于处理信号的关键函数,它允许进程对操作系统发送的各种信号做出响应。信号是Linux和其他类UNIX系统中一种进程间通信(IPC)的方式,用于通知进程发生了某种事件,如用户请求终止进程、硬件故障、定时器到期等。下面是对signal()函数的基本介绍和使用方法:

函数原型

#include <signal.h>typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);

参数说明

  • signum:要处理的信号编号,比如SIGINTSIGTERM等。
  • handler:当指定的信号发生时,系统调用的处理函数。它可以是以下几种:
  • SIG_DFL(默认处理):恢复信号的默认行为,如终止进程。
  • SIG_IGN(忽略信号):忽略此信号。
  • 自定义函数:一个用户自定义的函数指针,该函数原型通常为void function(int signum),其中signum是接收到的信号编号。

返回值

  • 如果成功,signal()返回之前为该信号设置的处理函数的地址。如果之前没有设置处理函数(即使用默认处理),则返回SIG_DFL;如果之前忽略了该信号,则返回SIG_IGN
  • 在某些系统上,如果提供了无效的signumhandler不是SIG_DFLSIG_IGN或有效的函数指针,signal()可能会失败并返回SIG_ERR

注意事项

  • signal()的行为在不同版本的POSIX标准和不同的Unix系统之间有所不同,特别是关于信号处理函数的重新安装性。某些系统遵循传统BSD语义,而另一些则遵循POSIX.1-1990或POSIX.1-2001语义。
  • 对于实时信号(如SIGRTMINSIGRTMAX之间的信号),推荐使用sigaction()函数来代替signal(),因为它提供了更精细的控制和更一致的跨平台行为。

示例

下面是一个简单的示例,展示了如何使用signal()来捕获SIGINT(通常是Ctrl+C)信号,并忽略它,使得进程在接收到此信号时终止:

#include<iostream>
#include<unistd.h>
#include <signal.h>
#include<cstdio>
using namespace std;void signal_hander(int signum)
{printf("Caught SIGINT, but ignoring...\n");exit(0);
}int main()
{signal(2,signal_hander);while(true){cout << "process running ..." << endl;sleep(1);}
}

我们重新编译一下,运行一下:
在这里插入图片描述
我们又用信号2来试验一下:
在这里插入图片描述

后台程序

大家发现没有,如果我们运行process,此时我们输入命令行是没有用的:
在这里插入图片描述
如果我们不想这样,我们可以把它放在后台,只要后面带一个&就行:
在这里插入图片描述
此时再用Ctrl + C是无法结束后台进程的:
在这里插入图片描述此时,只用两种办法,第一种用信号,或者pkill + 进程名
在这里插入图片描述第二种,让后台程序回到前台:
在这里插入图片描述后台程序一运行时,会有一个编号,此时fg + 编号可以让后台程序回到前台:
在这里插入图片描述回到前台,就可以使用Ctrl + C。

前台转后台

快捷键Ctrl + Z可以让前台程序停止,转向后台:
在这里插入图片描述
命令行jobs可以看到所有的后台程序:
在这里插入图片描述如果我们想开启,我们使用bg + 序号
在这里插入图片描述就可以让程序在后台运行。

检测输入

我们输入Ctrl + Z等这些组合键,操作系统识别键盘输入的过程大致如下:

  1. 硬件层面:现代键盘通常通过USB或无线连接与计算机通信,以前的老式键盘可能使用PS/2接口。当用户按下键盘上的一个键时,键盘硬件会生成一个电信号,这个信号代表了特定按键的扫描码。
  2. 中断请求:键盘控制器将这个信号转换成键盘中断请求,并发送给计算机的中断控制器。中断是CPU对外部事件的一种快速响应机制,它能够暂停当前正在执行的任务,转而处理紧急的外部事件。
  3. 中断处理:CPU接收到中断请求后,会保存当前任务的状态(如程序计数器等),然后跳转到中断处理程序的入口地址执行。对于键盘中断,这个处理程序通常是操作系统的一部分。
  4. 读取扫描码:在中断处理程序中,操作系统会读取键盘控制器中的数据寄存器,获取按键的扫描码。扫描码是一个独一无二的标识,对应于键盘上的每一个键。
  5. 转换为ASCII码或虚拟键码:操作系统接着会将扫描码转换为操作系统内部可以理解的形式,如ASCII码(用于文本字符)或虚拟键码(用于功能键和特殊键)。这个过程可能涉及查表或其他映射机制。
  6. 事件队列与应用程序:转换后的字符或按键信息会被封装成一个事件,并放入系统的消息队列中。等待处理的事件包括按键按下和释放等。当应用程序(如文本编辑器)调用相应的API(如Windows的 GetMessage 或 Linux 的 select/poll)检查消息队列时,操作系统会将这些事件传递给应用程序。
  7. 应用程序响应:应用程序根据接收到的键盘事件执行相应的操作,比如在文本框中显示字符或响应快捷键命令。
  8. 释放中断:一旦中断处理完成,操作系统会恢复之前被中断的任务状态,继续执行。

整个过程确保了用户在键盘上的输入能够迅速、准确地被操作系统捕捉并传递给正在运行的应用程序。

中断向量表

这里面还有一个中间向量表:

中断向量表是计算机系统中一个非常关键的数据结构,它存储了所有中断服务程序(ISR,Interrupt Service Routines)的入口地址。这些中断服务程序负责处理各种硬件或软件触发的中断事件。以下是中断向量表的一些关键特性与作用:

  1. 内存中的固定位置:中断向量表通常位于内存中的一个固定位置,使得CPU在任何时候都能迅速访问到它。在某些体系结构中,比如x86,中断向量表可能位于低地址区域,便于快速响应中断。
  2. 条目结构:表中的每个条目对应一个中断类型或中断源,条目内包含的是相应中断服务程序的起始地址(或者是一个跳转指令,间接指向实际的中断处理程序)。每个条目可能占用2个、4个或更多字节,具体取决于处理器架构。
  3. 中断类型号与向量地址:中断类型号是一个标识特定中断的数字。在一些系统中,中断类型号乘以某个固定值(如4)可以得到该中断向量在中断向量表中的地址,这样CPU就能根据中断类型快速定位到正确的中断处理程序。
  4. 中断响应过程:当CPU检测到一个中断请求时,它会立即停止当前的任务执行,保存现场(即当前的处理器状态),然后根据中断类型号查询中断向量表,获取中断服务程序的入口地址,并跳转到该地址开始执行中断处理程序。
  5. 复位与初始化:在系统启动或复位时,中断向量表的基地址会被初始化到一个预定义的位置。某些处理器(如ARM Cortex-M系列)允许通过VTOR(向量表偏移寄存器)来重新定位中断向量表的位置,以适应不同的系统配置需求。
  6. 固定与动态分配:在一些简单的系统中,中断向量表可能是静态定义的,而在更复杂的系统中,部分中断向量可能支持动态分配,允许操作系统或固件在运行时安装或更改中断服务例程的地址。

中断向量表的设计和管理是确保系统能够高效、可靠地响应各种内外部事件的基础,对于维持系统的实时性和稳定性至关重要。

相关文章:

Linux —— 信号初识

Linux —— 信号初识 什么是信号测试几个信号signal函数函数原型参数说明返回值注意事项示例 后台程序前台转后台检测输入中断向量表 我们今天来继续学习Linux的内容&#xff0c;今天我们要了解的是Linux操作系统中的信号&#xff1a; 什么是信号 信号是操作系统内核与进程之…...

webpack进阶 -- 自定义Plugin,Loader封装打包优化

介绍 Webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。在 Webpack 处理应用程序时&#xff0c;它会在内部构建一个依赖图(dependency graph)&#xff0c;这个依赖图对应映射到项目所需的每个模块&#xff0c;并生成一个或多个 bundle。在这个过程中…...

《Decoupled Optimisation for Long-Tailed Visual Recognition》阅读笔记

论文标题 《Decoupled Optimisation for Long-Tailed Visual Recognition》 长尾视觉识别的解耦优化 作者 Cong Cong、Shiyu Xuan、Sidong Liu、Shiliang Zhang、Maurice Pagnucco 和 Yang Song、 来自新南威尔士大学计算机科学与工程学院、北京大学计算机学院多媒体信息处…...

Springboot+Vue项目-基于Java+MySQL的毕业就业信息管理系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…...

条件平差——以水准网平差为例 (python详细过程版)

目录 一、原理概述二、案例分析三、代码实现四、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、原理概述 条件平差的函数模型和随机模型为: A V + W = 0...

mysql -- WITH RECURSIVE 语法

引言 在 SQL 中&#xff0c;WITH RECURSIVE 是一个用于创建递归查询的语句。它允许你定义一个 Common Table Expression (CTE)&#xff0c;该 CTE 可以引用自身的输出。递归 CTE 非常适合于查询具有层次结构或树状结构的数据&#xff0c;例如组织结构、文件系统或任何其他具有…...

洗地机什么品牌好?洗地机怎么选?618洗地机选购指南

随着科技的飞速发展&#xff0c;洗地机以其高效的清洁能力、稳定的性能和用户友好的设计而闻名&#xff0c;不仅可以高效吸尘、拖地&#xff0c;还不用手动洗滚布&#xff0c;已经逐渐成为现代家庭不可或缺的清洁助手。然而&#xff0c;在众多品牌和型号中&#xff0c;如何选择…...

nginx负载均衡配置

1.nginx负载均衡配置 upstream lbs {server 192.168.1.12:8080;server 192.168.1.12:8081; }server {listen 80;server_name localhost a.com;#charset koi8-r;#access_log logs/host.access.log main;location / {root html;index index.html index.htm;}locatio…...

HarmonyOS NEXT星河版之美团外卖点餐功能实战(中)

接上 一、UI布局 1.1 购物车Item Preview Component export struct MTCartItemView {build() {Row({ space: 6 }) {Image(https://bkimg.cdn.bcebos.com/pic/4d086e061d950a7bc94a331704d162d9f3d3c9e2).width(42).aspectRatio(1).borderRadius(5)Column({ space: 3 }) {Text…...

CTF-Web Exploitation(持续更新)

CTF-Web Exploitation 1. GET aHEAD Find the flag being held on this server to get ahead of the competition Hints Check out tools like Burpsuite to modify your requests and look at the responses 根据提示使用不同的请求方式得到response可能会得到结果 使用…...

图书管理系统c语言

创建一个图书管理系统是一个涉及数据结构和文件操作的项目。在C语言中&#xff0c;你可以使用结构体来表示图书信息&#xff0c;使用函数来实现系统的各项功能。以下是一个简单的图书管理系统的示例&#xff0c;包括基本的添加、显示、查找和删除图书的功能。 1. 定义图书结构…...

森林消防—高扬程水泵,高效、稳定、可靠!/恒峰智慧科技

森林&#xff0c;作为地球的“绿色肺叶”&#xff0c;不仅为我们提供了丰富的自然资源&#xff0c;更是维持生态平衡的重要一环。然而&#xff0c;随着全球气候的变化和人为活动的增加&#xff0c;森林火灾频发&#xff0c;给生态环境和人民生命财产安全带来了巨大威胁。在森林…...

光伏设备制造5G智能工厂数字孪生可视化平台,推进行业数字化转型

光伏设备制造5G智能工厂数字孪生可视化平台&#xff0c;推进行业数字化转型。光伏设备制造5G智能工厂数字孪生可视化平台是光伏行业数字化转型的重要一环。通过数字孪生平台&#xff0c;光伏设备制造企业可以实现对生产过程的全面监控和智能管理&#xff0c;提高生产效率&#…...

【论文阅读笔记】TS2Vec: Towards Universal Representation of Time Series

【论文阅读笔记】TS2Vec: Towards Universal Representation of Time Series 摘要 这段文字介绍了一个名为TS2Vec的通用框架&#xff0c;用于学习时间序列数据的表示&#xff0c;可以在任意语义层次上进行。与现有方法不同&#xff0c;TS2Vec通过对增强的上下文视图进行层次化…...

windows驱动开发-DMA技术(一)

DMA(Direct Memory Access)是所有现代电脑的重要特色&#xff0c;它允许不同速度的硬件装置来沟通&#xff0c;而不需要依于 CPU 的大量中断负载&#xff0c;否则CPU 需要从设备缓存中把每一页的数据复制到缓存中&#xff0c;然后把它们再次写入到新的地方&#xff0c;在这个过…...

实用的Chrome命令

以下是一些实用的Chrome命令及其用途&#xff1a; --allow-outdated-plugins&#xff1a;允许浏览器使用过期的插件&#xff0c;这在开发过程中可能会用到&#xff0c;以便测试兼容性。chrome://downloads&#xff1a;打开Chrome的下载页面&#xff0c;查看和管理你的下载文件…...

数据库(MySQL)基础:约束

一、概述 1.概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 2.目的&#xff1a;保证数据库中数据的正确、有效性和完整性。 3.分类 约束描述关键字非空约束限制该字段的数据不能为nullnot null唯一约束保证该字段的所有数据都是唯一…...

ControlNet作者放大招!IC-Light:控制生成图片光照效果!

ControlNet作者张吕敏近日又开源了一项新的工作&#xff1a;IC-Light &#xff08;Impose Constant Light&#xff09;&#xff0c;在不改变图片内容的条件下&#xff0c;可以控制生成图片的光照效果。 作者发布了两种类型的模型&#xff1a;文本条件重打光模型和背景条件重打光…...

【Java】Java中类的初始化顺序(静态方法,静态块,非静态块,最后有流程图)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、无继承关系类的初始化 1、静态变量k被初始化 2、静态变量t1初始化 3、静态变量 t2初始化 4、静态变量i初始化 5、静态变量n初始化 6、静态块初始化 7、非静态块初始化 8、非静态属性初始化 9、执行构造…...

在RK3588开发板使用FFMpeg 结合云服务器加SRS实现摄像头数据推流到云端拱其他设备查看

今天测试了一把在开发板把摄像头数据推流到云端服务器&#xff0c;然后给其他电脑通过val软件拉取显示摄像头画面&#xff0c;浅浅记录一下大概步骤 1.开发板端先下载ffmpeg apt install ffmpeg2.云服务器先安装SRS的库 云服务器我使用ubuntu系统&#xff0c;SRS是个什么东西&…...

elasticsearch搭建教程

主要参看这里就行,需要特别注意其中报错的解决方案&#xff1a;搭建elasticsearch 单机节点里&#xff0c;按照上述教程搭建只能开放本地访问&#xff0c;如果需要其他机器访问&#xff0c;需要在elasticsearch.yml里新增几个配置&#xff1a; node.name: node-1 network.host…...

c++ 归并排序

归并排序是一种遵循分而治之方法的排序算法。它的工作原理是递归地将输入数组划分为较小的子数组并对这些子数组进行排序&#xff0c;然后将它们合并在一起以获得排序后的数组。 简单来说&#xff0c;归并排序的过程就是将数组分成两半&#xff0c;对每一半进行排序&#xff0c…...

基于vs和C#的WPF应用之动画3

注&#xff1a;1、在内部和外部使用缓动函数 <Grid.Resources> <PowerEase x:Key"powerease" Power"3" EasingMode"EaseInOut"/> </Grid.Resources> <DoubleAnimation EasingFunction"{StaticResource powerease}&quo…...

Python import 必看技巧:打造干净利落的代码结构

大家好,学习Python你肯定绕不过一个概念import,它是连接不同模块的桥梁,是实现代码复用和模块化的关键。本文将带你深入探索Python中import的原理,并分享一些实用的导入技巧。 1. import 原理 导入机制概述 在Python中,模块(module)是一种封装Python代码的方式,它允许…...

计算机视觉(CV)(Computer Vision)

计算机视觉技术&#xff08;Computer Vision&#xff09;&#xff0c;解决的是什么&#xff1f; 图片和视频是非结构化数据&#xff0c;机器如果要理解某一图片或视频表达的内容&#xff0c;是无法直接分析的&#xff0c;这种情况&#xff0c;就需要有计算机视觉技术&#xff…...

python:画折线图

import pandas as pd import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties# 设置新宋体字体的路径 font_path D:/reportlab/simsun/simsun.ttf# 加载新宋体字体 prop FontProperties(fnamefont_path)""" # 读取 xlsx 文件 d…...

Spring Data JPA 与 MyBatisPlus的比较

前言 JPA&#xff08;Java Persistence API&#xff09;和MyBatis Plus是两种不同的持久化框架&#xff0c;它们具有不同的特点和适用场景。 JPA是Java官方的持久化规范&#xff0c;它提供了一种基于对象的编程模型&#xff0c;可以通过注解或XML配置来实现对象与数据库的映射…...

【C++】STL-list的使用

目录 1、list的使用 1.1 list的构造 1.2 list的遍历 1.3 list capacity 1.4 list element access 1.5 容量相关 list是一个带头双向循环链表 1、list的使用 1.1 list的构造 1.2 list的遍历 list只有两种遍历方式&#xff0c;因为没有operator[] 因为list的双向链表&am…...

进度条(小程序)

缓冲区的概念 缓冲区是内存中的一个临时存储区域&#xff0c;用来存放输入或输出数据。在标准 I/O 库中&#xff0c;缓冲区的使用可以提高数据处理的效率。例如&#xff0c;当向终端输出文本时&#xff0c;字符通常存储在缓冲区中&#xff0c;直到缓冲区满或者遇到特定条件时才…...

PyCharm安装教程(超详细图文教程)

一、下载和安装 1.进入PyCharm官方下载&#xff0c;官网下载地址&#xff1a; https://www.jetbrains.com/pycharm/download/ 专业版安装插件放网盘了&#xff0c;网盘下载即可&#xff1a;itcxy.xyz/229.html2.安装 1.下载后找到PyCharm安装包&#xff0c;然后双击双击.ex…...

wordpress4.2.15漏洞/seo快速排名利器

数据从业者常在多种工具之间跳来跳去&#xff0c;这种碎片化导致了协作、共享和生产力方面的问题。 企业云数据量的增加以及数据转换、模型构建和可视化工具的出现&#xff0c;推动了现代数据堆栈的崛起。大部分公司都在加大对数据团队的投入&#xff0c;以适应不断变化的需求…...

网页空间层次/seo服务价格表

这一系列文章原载于公众号 工程师milter&#xff0c;如果文章对大家有帮助&#xff0c;恳请大家动手关注下哈~matplotlib是优秀的python画图工具&#xff0c;功能十分强大&#xff0c;但是使用却很复杂。你有没有如下的经历:1、图形只差一点点就满足你的要求&#xff0c;可是怎…...

学网站建设 赚钱/女装标题优化关键词

我们来看看未来区块链技术会怎样影响我们的生活。20年后的某一天&#xff0c;M国总统大选正在如火如荼地进行&#xff0c;你把智能手表调到投票界面&#xff0c;看了下选举人&#xff1a;今年好像没什么有特色的竞选人啊。李查得&#xff1f;没意思&#xff0c;一个中规中矩的政…...

集美网站开发/交换链接或称互惠链接

Table在IOS应用开发中非常重要&#xff0c;现在我们就来学习一下 1. 首先我们来了解一下Table的视图结构 表头视图(table header view)&#xff1a;表视图最上边的视图,用于展示表视图的信息,例如表视图刷新信息表脚视图(table footer view)&#xff1a;表视图最下边的视图,用于…...

优化网站目录结构/免费seo培训

我正在尝试安装并运行syslog-ng但是我被阻止了以下错误.Error opening configuration file; filename/etc/syslog-ng/syslog-ng.conf,errorPermission denied (13)我用sudo运行它,文件和目录现在都有777权限.我已经使用了strace,这肯定是一个公开的电话,但是EACCESS失败了.据我…...

网站设计特色/seo快速排名软件推荐

前面的《配置中心》和《服务注册&服务提供者》这两篇分别讲解了配置中心和服务提供者&#xff0c;但是服务提供者使用的配置文件还是本地的&#xff0c;没有使用配置中心的配置文件。今天看看如何实现服务提供者使用配置中心的配置文件。新建项目sc-eureka-client-provider…...