IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux学习日记17——信号 -> 正文阅读

[系统运维]Linux学习日记17——信号

学习视频链接

黑马程序员-Linux系统编程_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1KE411q7ee?p=129

目录

一、信号的概念

1.1 信号共性

1.2 信号的机制

1.3 与信号相关的事件和状态

1.4 信号的编号

1.5 信号四要素?

二、kill函数/命令产生信号

2.1 kill产生命令

2.2?kill函数

2.3 进程组:

2.4 权限保护:

2.5?其他几个发送信号的函数

三、alarm 和 setitimer 函数

3.1?alarm函数

3.2 setitimer函数


一、信号的概念

1.1 信号共性

简单、不能携带大量信息、满足条件才能发送

1.2 信号的机制

1、A 给 B 发送信号,B 收到信号之前执行自己的代码,收到信号后,不管执行到程序的什么位置,都要暂停运行,去处理信号,处理完毕再继续执行。与硬件中断类似 —— 异步模式。但信号是软件层面上实现的中断,早期常被称为 “软中断”。

2、信号的特质:

由于信号是通过软件方法实现,其实现手段导致信号有很强的延时性。但对于用户来说,这个延
迟时间非常短,不易察觉。

3、每个进程收到的所有信号,都是由内核负责发送的,内核处理。

1.3 与信号相关的事件和状态

1、产生信号:

(1) 按键产生,如:Ctrl + c、 Ctrl + z、 Ctrl + \

【Ctrl + c、Ctrl + \ 都能终止程序,但是发送的信号不同。Ctrl + z 暂停进程,通过输入 fg 指令可以让他继续执行】

(2) 系统调用产生,如:kill、 raise、 aborte

(3) 软件条件产生,如:定时器 alarm

(4) 硬件异常产生,如:非法访问内存(段错误)、除 0(浮点数例外)、内存对齐出错(总线错误)

(5) 命令产生,如:kill 命令

2、递达:

递送并且到达进程

3、未决:

产生和递达之间的状态。主要由于阻塞(屏蔽)导致该状态

4、信号的处理方式

(1) 执行默认动作

(2) 忽略(丢弃)

(3) 捕捉(调用户处理函数)

5、Linux 内核的进程控制块 PCB 是一个结构体,task struct,除了包含进程 id,状态,工作目录,用户id,组id,文件描述符表,还包含了信号相关的信息,主要指阻塞信号集和未决信号集

6、阻塞信号集(信号屏蔽字):

将某些信号加入集合,对他们设置屏蔽,当屏蔽 x 信号后,再收到该信号,该信号的处理将推后(解除屏蔽后)

7、未决信号集:

(1) 信号产生,未决信号集中描述该信号的位立刻翻转为 1,表信号处于未决状态。当信号被处理对应位翻转回为 0。这一时刻往往非常短暂

(2) 信号产生后由于某些原因(主要是阻塞)不能抵达。这类信号的集合称之为未决信号集。在屏蔽解除前,信号一直处于未决状态

8、图示

下面图中未决信号集有一个中断信号将要被执行,信号被处理后变为 0?

下面图中未决信号集有一个中断信号将要被执行,但是信号屏蔽字将这个信号屏蔽了,一直处理不了

1.4 信号的编号

常规信号为前 31 个,都有默认事件和处理动作

实时信号没有默认动作

1.5 信号四要素?

1、编号? 2、名称? 3、事件? 4、默认处理动作

通过 man 7 signal 查看

kill 进程id? 默认使用信号量为 15 的信号杀死进程

(1) SIGHUP:当用户退出 shell 时,由该 shell 启动的所有进程将收到这个信号,默认动作为终止进程

(2) SIGINT:挡用户按下了 <ctrl+c> 组合键时,用户终端向正在运行中的由该终端启动的程序发出此信号。默认动作为终止进程

(3) SIGQUIT:当用户按下 <ctrI+\> 组合键时产生该信号,用户终端向正在运行中的由该终端启动的程序发出些信号。默认动作为终止进程

(4) SIGILL:CPU 检测到某进程执行了非法指令。默认动作为终止进程并产生 core 文件

(5) SIGTRAP:该信号由断点指令或其他 trap 指令产生。默认动作为终止里程并产生 core 文件

(6) SIGABRT:调用 abort 函数时产生该信号。默认动作为终止进程并产生 core 文件

(7) SIGBUS:非法访问内存地址,包括内存对齐出错,默认动作为终止进程并产生 core 文件

(8) SIGFPE:在发生致命的运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等所有的算法错误。默认动作为终止进程并产生 core 文件

(9) SIGKILL:无条件终止进程。本信号不能被忽略,处理和阻塞。默认动作为终止进程。它向系统管理员提供了可以杀死任何进程的方法

(10) SIGUSR1:用户定义的信号。即程序员可以在程序中定义并使用该信号。默认动作为终止进程

(11) SIGSEGV:指示进程进行了无效内存访问。默认动作为终止进程并产生 core 文件

(12) SIGUSR2:另外一个用户自定义信号,程序员可以在程序中定义并使用该信号。默认动作为终止进程

(13) SIGPIPE:Broken pipe 向一个没有读端的管道写数据。默认动作为终止进程

(14) SIGALRM:定时器超时,超时的时间由系统调用 alarm 设置。默认动作为终止进程

(15) SIGTERM:程序结束信号,与 SIGKILL 不同的是,该信号可以被阳塞和终止。通常用来要示程序正常退出。执行 shell 命令 Kill 时,缺省产生这个信号。默认动作为终止进程

(16) SIGSTKFLT:Linux 早期版本出现的信号,现仍保留向后兼容。默认动作为终止进程

(17) SIGCHLD:子进程状态发生变化时,父进程会收到这个信号。默认动作为忽略这个信号

(18) SIGCONT:如果进程已停止,则使其继续运行。默认动作为继续 / 忽略

(19) SIGSTOP:停止进程的执行。信号不能被忽略,处理和阻塞。默认动作为暂停进程

(20) SIGTSTP:停止终端交互进程的运行。按下 <ctrl+z> 组合键时发出这个信号。默认动作为暂停进程

(21) SIGTTIN:后台进程读终端控制台。默认动作为暂停进程

(22) SIGTTOU:该信号类似于 SIGTTIN,在后台进程要向终端输出数据时发生。默认动作为暂停进程

(23) SIGURG:套接字上有紧急数据时,向当前正在运行的进程发出些信号,报告有紧急数据到达。如网络带处数据到达,默认动作为忽略该信号

(24) SIGXCPU:进程执行时问超过了分配给该进程的CPU时间,系统产生该信号并发送给该进程。默认动作为终止进程

(25) SIGXFSZ:超过文件的最大长度设置。默认动作为终止进程

(26) SIGVTALRM:虚拟时钟超时时产生该信号。类似于 SIGALRM,但是该信号只计算该进程占用 CPU 的使用时间。默认动作为终止进程

(27) SGIPROF:类似于 SIGVTALRM,它不公包括该进程占用 CPU 时间还包括执行系统调用时间。默认动作为终止进程

(28) SIGWINCH:窗口变化大小时发出。默认动作为忽略该信号

(29) SIGIO:此信号向进程指示发出了一个异步 IO 事件。默认动作为忽略

(30) SIGPWR:关机。默认动作为终止进程

(31) SIGSYS:无效的系统调用。默认动作为终止进程井产生 core 文件

(34) SIGRTMIN ~ (64) SIGRTMAX:LINUX 的实时信号,它们没有固定的含义(可以由用户自定义)。所有的实时信号的默认动作都为终止进程
?

二、kill函数/命令产生信号

2.1 kill产生命令

1、kill 命令产生信号:kill -SIGKILL pid

kill?-SIGKILL -1 杀死所有的进程,电脑重启

2.2?kill函数

1、kill 函数:给指定进程发送指定信号(不一定杀死)

int kll(pid_t pid, int sig);? 成功:0;失败:?-1 (ID 非法,信号非法,普通用户杀 init 进程等权级问题),设置 errno

sig:不推荐直接使用数字,应使用宏名,因为不同操作系统信号编号可能不同,但名称一致

pid>0:发送信号给指定的进程

pid=0:发送信号给与调用 kill 函数进程属于同一进程组的所有进程

pid<0:取 |pid| 发给对应进程组?

pid=-1:发送给进程有权限发送的系统中所有进程

?

?还可以使用其他的信号杀死进程

2.3 进程组:

每个进程都属于一个进程组,进程组是一个或多个进程集合,他们相互关联,共同完成-一个实体任务,每个进程组都有一个进程组长,默认进程组ID与进程组长ID相同

2.4 权限保护:

super 用户 (root) 可以发送信号给任意用户,普通用户是不能向系统用户发送信号的。kill -9 (root 用户的 pid)? 是不可以的。同样,普通用户也不能向其他普通用户发送信号,终止其进程。只能向自己创建的进程发送信号。普通用户基本规则是:发送者实际或有效用户 ID == 接收者实际或有效用户 ID

2.5?其他几个发送信号的函数

int raise(int sig);

void abort(void);

三、alarm 和 setitimer 函数

3.1?alarm函数

1、作用

设置定时器(闹钟)。在指定 seconds 后,内核会给当前进程发送 (14) SIGALRM 信号。进程收到该信号,默认动作终止

每个进程都有且只有唯一个定时器

2、unsigned int alarm(unsigned int seconds);?

返回 0 或剩余的秒数,无失败

3、常用:

取消定时器 alarm(0),返回旧闹钟余下秒数

4、案例: alarm(5)→3sec→alarm(4) →5sec →alarm(5) →alarm(0)?

调用 alarm(4) 返回 2,调用?alarm(5) 返回 0,调用?alarm(0) 返回 5

5、注意

定时,与进程状态无关(自然定时法)!就绪、运行、挂起(阻塞、暂停)、终止、僵尸... 无论进程处于何种状态,alarm 都计时

6、案例:一秒钟 for 循环的次数

(1) 基础版本

?

?

(2) 运行时候加上查看时间的内容

在用户空间(用户态)运行了 0.008 秒,再系统空间(核心态)运行了 0.873 秒

实际执行时间 = 系统时间 + 用户时间 + 等待时间

(3) 运行的内容写入文件

?

?

?得出结论:优化 IO 能显著提高程序运行效率

?

3.2 setitimer函数

1、作用

设置定时器(闹钟)

可代替 alarm 函数。精度微秒 us,可以实现周期定时

2、int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);

成功:0;? ? 失败:-1,设置 errno

参数:

(1) which: 指定定时方式。

① 自然定时:ITIMER_REAL → (14) SIGLARM? ?计算自然时间(传入这个参数和上面的 alarm 函数的效果就是一样的)

② 虚拟空间计时(用户空间):ITIMER_VIRTUAL → (26) SIGVTALRM? ? 只计算进程占用 cpu 的时间

③ 运行时计时(用户 + 内核):ITIMER_PROF → (27) SIGPROF? ? 计算占用 cpu 及执行系统调用的时间

(2) new_value:定时秒数

(3)?old_value:传出参数,上次定时剩余时间

(4) struct itimerval 结构体

?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 19:19:35  更:2022-04-22 19:20:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:37:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码