Linux学习-----(进程信号)

概念

1.概念:进程信号就是一种事件的通知机制,给进程通知发生了什么事情,然后进程要放下当前干的事情去处理这个事情。

2.查看进程信号:
①:指令:kill -l //查看linux中的信号种类--62种
如下图:
在这里插入图片描述
其中,每一个信号都有自己的编号和宏定义,这些宏定义可以在signal.h中找到。
如上,其中对于前31个信号,它是linux下自己定义的,后面的信号是后来增加的,增加的信号比自己定义的信号更好一点,具体表现在以下几个方面:

  • 前1~34个信号被称为非实时信号(非可靠信号)。
  • 后面的信号被成为实时信号(可靠信号)。
  • 非实时信号可能会丢失,实时信号不会丢失(具体在下面会讲到)。

对于上面出现的信号,我们都可用如下指令来查看其具体功能:

man 7 signal //例如,查看第七个信号的具体功能。

生命周期

对于信号的生命周期一般分为如下几步:产生、注册、注销、处理、堵塞。

1.信号的产生:

对于信号的产生分为两种,一种为软件产生,一种为硬件产生:

①:软件产生:
概念:是通过函数的调用来产生信号,让进程去接收,然后去执行。
对于软件产生一般有以下几种:

  • kill -signum pid;:kill命令 其中是给pid(进程id)这个进程发送一个能让其进程退出的信号(这也是kill信号能杀死进程的原理)
  • int kill(pid_t pid,int sig);:给指定的信号发送一个指定的信号(其中pid为进程的id,sig为我们要发送的信号)成功返回0,失败返回-1
  • int raise(int sig);:给自己发送指定的信号,成功返回0,失败返回-1
  • void abort(void);:给自己发送SIGABRT信号,其中abort调用的时候一定会成功,所以没有返回值
  • unsigned int alarm(unisgned int s);:表示的是s秒后给自己发送SIGALRM信号。
  • pause():休眠接口
  • signal(int sig,func):将sig号进程改为func函数去处理,就是改变信号的处理方式

其中这些函数的头文件为:#include<signal.h>

②:硬件产生:
是通过键盘来进行操作,也是我们经常会使用到的:

  • ctrl+c:发送的是2号信号。
  • ctrl+\:发送的是3号信号。
  • ctrl+z:发送的是20号信号。

2.信号的注册:
对于产生的信号,我们需要通过对信号进行注册,进程才知道自己接收到了一个信号需要去处理,主要目的就是在进程中做标记,这就要用到pcb中的一个未决信号集合(是一个位图的结构),用于标记进程信号。
且看如下图:

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值