进程学习(三)

本文介绍了信号在操作系统中的作用,包括信号的产生、递达、未决状态以及处理方式。详细阐述了不同信号如SIGINT、SIGKILL、SIGABRT等的触发情况,并讨论了信号的默认动作和用户自定义处理。还提到了信号集的操作函数,如sigset_t、sigprocmask等在进程管理中的应用。
摘要由CSDN通过智能技术生成

*信号*:信息的载体

1、信号:1.简单 2.不能携带大量信息 3.满足某个特设条件才发送

2、信号的机制:信号通过软件手段实现的,导致某些信号会产生延迟性,但对于用户来说不易察觉。每个进程收到的信号都是由内核负责发送和内核负责处理

3、与信号相关的事件和状态:

1)产生信号:

按键产生:

Ctrl+c--------->2)SIGINT(终止/中断)

Ctrl+z---------->20) SIGTSTOP (暂停/停止) T----Teminal终端

Ctrl+\----------->3) SIGQUIT(退出)

系统调用产生:

kill----->SIGKILL

raise----->给当前进程发送指定信号(自己给自己发)

ay------->给自己发异常终止信号 6)SIGABRT信号,终止并产生Core 文件

软件条件产生:

定时器alarm,每个进程有且仅有一个定时器------->SIGALRM 默认终止

定时与进程状态无关(自然定时法):无论进程处于任何状态,定时都继续

settimer函数:精度us,可以实现周期性定时

硬件异常产生:

非法访问内存(段错误)------>11)SIGSEGV(段错误)

除0(浮点数除外)------>8)SIGFP(浮点数例外)

内存对齐出错(总线错误)-------->7)SIGBUS

命令产生:kill命令--->SIGKILL

2)递达:递达并且到达进程

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

阻塞信号集(系统屏蔽字):

未决信号集:

4)信号处理方式:

执行默认动作、忽略(丢弃)(处理的方式就是丢弃)、捕捉(调用户处理函数)

5)信号四要素

编号、名称、事件、默认处理动作

默认处理动作:Term:终止进程 Ign:忽略信号 Core:终止进程,生成Core文件(查验死亡原因,用于GDB调试) Stop:停止(暂停)进程 Cont:继续运行进程

9号:SIGKILL和19号:SIGSTOP不允许忽略和捕捉,只能执行默认动作

6)信号集操作函数

a、信号集设定

sigset_t set;  unsigned long的一种封装

int sigemptyset(sigset_t * set);//清0集合

int sigfillset(sigset_t* set)//全部置1

int sigaddset(sigset_t* set,int signum)//将某个信号加入到信号集

int sigdelset(sigset_t* set,int signum)//将某个信号删除

int sigismember(const sigset_t *set,int signum)//判断信号是否在集合中

sigprcmask:用来屏蔽信号和解除屏蔽

sigpending:读未决信号集

sighandler_t signal(int signum, sighandler_t handler);:注册捕捉信号

typedef void (*sighandler_t)(int);参数为int 类型的函数指针

sigaction:注册捕捉信号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值