赞
踩
1.概念:进程信号就是一种事件的通知机制,给进程通知发生了什么事情,然后进程要放下当前干的事情去处理这个事情。
2.查看进程信号:
①:指令:kill -l //查看linux中的信号种类--62种
如下图:
其中,每一个信号都有自己的编号和宏定义,这些宏定义可以在signal.h中找到。
如上,其中对于前31个信号,它是linux下自己定义的,后面的信号是后来增加的,增加的信号比自己定义的信号更好一点,具体表现在以下几个方面:
对于上面出现的信号,我们都可用如下指令来查看其具体功能:
man 7 signal //例如,查看第七个信号的具体功能。
对于信号的生命周期一般分为如下几步:产生、注册、注销、处理、堵塞。
1.信号的产生:
对于信号的产生分为两种,一种为软件产生,一种为硬件产生:
①:软件产生:
概念:是通过函数的调用来产生信号,让进程去接收,然后去执行。
对于软件产生一般有以下几种:
kill -signum pid;
:kill命令 其中是给pid(进程id)这个进程发送一个能让其进程退出的信号(这也是kill信号能杀死进程的原理)int kill(pid_t pid,int sig);
:给指定的信号发送一个指定的信号(其中pid为进程的id,sig为我们要发送的信号)成功返回0,失败返回-1int raise(int sig);
:给自己发送指定的信号,成功返回0,失败返回-1void abort(void);
:给自己发送SIGABRT信号,其中abort调用的时候一定会成功,所以没有返回值unsigned int alarm(unisgned int s);
:表示的是s秒后给自己发送SIGALRM信号。pause()
:休眠接口signal(int sig,func)
:将sig号进程改为func函数去处理,就是改变信号的处理方式其中这些函数的头文件为:#include<signal.h>
②:硬件产生:
是通过键盘来进行操作,也是我们经常会使用到的:
2.信号的注册:
对于产生的信号,我们需要通过对信号进行注册,进程才知道自己接收到了一个信号需要去处理,主要目的就是在进程中做标记,这就要用到pcb中的一个未决信号集合(是一个位图的结构),用于标记进程信号。
且看如下图:
其中sigpending是在pcb中,它是一个位图的结构,那么里面的数据要么是1要么是0,所以我们在操作的时候,对于传进来信号了,那么对应的位置就会变为1,这样程序就知道我们传进来的几号信号,然后对应的去处理。
对于进程而言,如果在同一时间接收到许多的进程信号,那么他会根据信号的次序来进行一一处理,但是对于可靠信号而言,进程会优先处理,并且,可靠信
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。