信号(二)---signal函数详解

前面提到了当进程收到了信号后,有三种处理信号的方法:忽略该信号;执行默认动作;捕捉该信号。

捕捉信号 的意思就是当进程收到一个信号时去执行我们指定的动作。signal 函数就是Linux系统提供用来捕捉信号的函数。

========================================================

函数原型:

函数参数:

  • signum:捕捉的信号
  • handler:收到信号后执行的动作,是个函数指针变量

返回值:

  • 调用失败时返回 SIG_ERR
  • 调用成功时返回 指向之前的信号处理程序的指针变量

=======================================================

signal 函数的参数handler除了可以是一个函数的地址之外,还可以是两个宏:SIG_IGN和SIG_DEL。

如果传的是 SIG_IGN,那么表示对于 signum 信号的处理方式是忽略该信号(注意不是默认动作中的忽略);SIG_IGN==(void(*)(int))1

如果传的是 SIG_DFL,那么表示对于 signum 信号的处理方式是采用默认动作。SIG_DFL==(void(*)(int))0

=====================================================

  当调用exec函数后,进程会将原来应该要捕捉的信号全部修改成为默认动作,而其余信号处理方式保持不变。之所以要这样处理是因为当调用exec函数后,原来进程的代码段、数据段以及堆栈都将会被覆盖,那么原来设置的信号处函数的地址将在exec后失去意义,不能使用。

  当使用fork创建一个子进程时,子进程会继承父进程的信号处理方式。

时间: 2024-12-28 12:31:41

信号(二)---signal函数详解的相关文章

ReactiveCocoa框架菜鸟入门——信号(Signal)详解

基础知识 在阅读本文之前,请确保你已成功导入ReactiveCocoa框架并对信号(Signal)和订阅者(Subscriber)有基本了解.或者尝试着完全理解以下一段内容: 信号是数据流,可以被绑定和传递.可以把信号想象成水龙头,只不过里面不是水,而是玻璃球(value),直径跟水管的内径一样,这样就能保证玻璃球是依次排列,不会出现并排的情况(数据都是线性处理的,不会出现并发情况).水龙头的开关默认是关的,除非有了接收方(subscriber),才会打开.这样只要有新的玻璃球进来,就会自动传送

【C语言天天练(二十)】scanf函数详解

引言:scanf函数虽然是学习C语言时比较早就接触的一个函数,但在使用过程中,发现真正掌握它却并不容易.本文就通过各种例子来详细的总结一下该函数的各种用法,假设它的调用格式为 scanf("<格式化字符串>",<地址表>). 1.一般使用scanf函数时都是为某个变量赋值,不考虑它的返回值.但是任何函数都是需要返回的(即使返回类型用void,也可以认为只是调用了return语句,只是并没有返回什么东西而已),同样的scanf函数也是有返回的,它的返回值是成功读取

JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 exec方法的返回值 exec方法返回的其实并不是匹配结果字符串,而是一个对象,简单地修改一下execReg函数,来做一个实验就可以印证这一点: function execReg(reg, str) { var result = reg.exec(str); alert(typeof result

delphi中的Format函数详解

首先看它的声明:[[email protected]][@21ki!] function Format(const Format: string; const Args: array of const): string; overload;[[email protected]][@21ki!] 事实上Format方法有两种形式,另外一种是三个参数的,主要区别在于它是线程安全的,[[email protected]][@21ki!]但并不多用,所以这里只对第一个介绍:[[email protect

c++ 虚函数详解

下面是对C++的虚函数的理解. 一,定义 简单地说,那些被virtual关键字修饰的成员函数,就是虚函数.虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离:用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略.下面来看一段简单的代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 classA { publi

linux网络编程之shutdown() 与 close()函数详解

linux网络编程之shutdown() 与 close()函数详解 参考TCPIP网络编程和UNP: shutdown函数不能关闭套接字,只能关闭输入和输出流,然后发送EOF,假设套接字为A,那么这个函数会关闭所有和A相关的套接字,包括复制的:而close能直接关闭套接字. 1.close()函数 [cpp] view plain copy print? <span style="font-size:13px;">#include<unistd.h> int 

Android-- Android事件机制之二:onTouch详解

Android事件机制之二:onTouch详解 在其中对OntouchEvent中的总结中,不是很具体.本文将主要对onTouch进行总结. onTouch是Android系统中整个事件机制的基础.Android中的其他事件,如onClick.onLongClick等都是以onTouch为基础的. onTouch包括从手指按下到离开手机屏幕的整个过程,在微观形式上,具体表现为action_down.action_move和action_up等过程. onTouch两种主要定义形式如下: (1)在

Android Touch系统简介(二):实例详解onInterceptTouchEvent与onTouchEvent的调用过程

上一篇文章主要讲述了Android的TouchEvent的分发过程,其中有两个重要的函数:onInterceptTouchEvent和onTouchEvent,这两个函数可被重装以完成特定的逻辑.onInterceptTouchEvent的定义为于ViewGroup中,默认返回值为false,表示不拦截TouchEvent.onTouchEvent的定义位于View中,当ViewGroup要调用onTouchEvent时,会利用super.onTouchEvent.ViewGroup调用onTo

linux中fork()函数详解[zz]

转载自:http://www.cnblogs.com/york-hust/archive/2012/11/23/2784534.html 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有