信号的概述

一.信号,需要识别,知道此类信号的作用(产生前)

1.信号产生的种类
2.信号产生的时候,和人的生活之间的运行关系是怎样的?
异步关系

二、(产生中)

当信号产生的时候,不一定立马处理信号,可能正在做优先级更高的事情(在合适的时候处理,信号已经产生,没有被处理(时间窗口),有某种方式记下此信号的产生)

三、准备处理信号(产生后)

信号的捕捉动作:
1.默认行为
2.自定义行为()
3.忽略信号(非常规)

四、人对应进程:

1.进程虽然现在没有收到信号,但是进程知道收到信号后该怎么做
进程内部一定能够识别信号,程序员设计进程时,已经内置了处理方案(信号属于进程内部特有的特征)
2.当信号到来时,进程可能正在处理更重要的事情,此时信号不会立即被处理(信号来了,处理信号被暂时保存起来),等合适时候再处理
3.进程开始处理信号,三种方式:
(1)默认行为:终止进程、暂停、继续运行等
(2)自定义行为(如:只打印一条信息等):捕捉动作
(3)忽略信号(什么都不做,不影响其它操作)

五、信号是会如何发送的?如何记录的?

1.kill -l:查看信号种类(62种,1-31:普通信号;34-64:实时信号)
2. 进程收到信号,本质是进程内信号位图被修改,实际是OS修改进程内的数据
3.如何发送:本质是OS直接去修改目标进程task_struct中信号位图(只能是OS),但发送的方式有多种。

六、保存信号

1.信号的记录是在进程的task_struct(PCB),结构体变量,本质是为记录更多的信号”是否“产生,用位图来保存信号数据
0000 0000 0000 0000 0000 0000 0000 0000
比特位的位置:信号编号
比特位的内容:是否收到信号
如:
0000 0000 0000 0000 0000 0000 0100 0000:收到6号信号

七、补充知识:

1、./文件 &:把进程放到后台,ctrl+C可以终止前台进程 ,不能终止后台进程,需要利用命令杀死此进程(查询出此进程的进程ID号:ps ajx | grep 进程名,杀死进程:kill -SIGQUIT ID号)
注意:ctrl+C是2号信号

2、组合键产生信号

#include<stdio.h>
#include<unistd.h>
#include<signal.h>

void handler(int signo)
{
  printf("get a signal! signo:%d\n",signo);
}
int main()
{
  signal(2,handler);
  while(1)
  {
    printf("hello sxl\n");
    sleep(1);
  }
  return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值