当前位置:   article > 正文

Linux学习-----(进程信号)_慕课网进程信号,探测 户是否已经输 ,如果 户在 3 秒内没有输 则

慕课网进程信号,探测 户是否已经输 ,如果 户在 3 秒内没有输 则

概念

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

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

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

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

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

生命周期

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

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中的一个未决信号集合(是一个位图的结构),用于标记进程信号。
且看如下图:
在这里插入图片描述
其中sigpending是在pcb中,它是一个位图的结构,那么里面的数据要么是1要么是0,所以我们在操作的时候,对于传进来信号了,那么对应的位置就会变为1,这样程序就知道我们传进来的几号信号,然后对应的去处理。
对于进程而言,如果在同一时间接收到许多的进程信号,那么他会根据信号的次序来进行一一处理,但是对于可靠信号而言,进程会优先处理,并且,可靠信

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/959500
推荐阅读
相关标签
  

闽ICP备14008679号