一、信号概念

信号都被定义为正整数,不存在编号为0的信号。

信号是异步事件的经典实例。产生信号的事件对进程而言是随机出现的,进程不能简单地测试一个变量来判别是否出现了一个信号,而是必须告诉内核在此信号出现时,请执行下列操作。

信号的处理有三种方式:

1.忽略此信号。大多数信号都可使用这种方式进行处理,SIGKILL和SIGSTOP不能被忽略,它们向超级用户提供了使进程终止或停止的可靠方法。

2.捕捉信号,通知内核在某种信号发生时调用一个用户函数。注意:不能捕捉SIGKILL和SIGSTOP信号

3.执行系统默认动作,注意,针对大多数信号的系统默认动作是终止进程。

二、signal函数

#include <signal.h>

void (*signal(int signo,void (*func)(int)))(int);

返回值:若成功则返回信号以前的处理配置,若出错则返回SIG_ERR

signo参数是信号名,func的值是常量SIG_IGN、常量SIG_DFL或当接到此信号后要调用的函数的地址。SIG_IGN表示忽略此信号,SIG_DFL表示接到此信号后的动作是系统默认动作。当指定函数地址时,则在信号发生时,调用该函数。func的参数可以从shell中接收,该函数称为信号处理程序。

1.程序调用

当执行一个程序时,所有信号的状态都是系统默认或忽略,通常所有信号都被设置为它们的默认动作,除非调用exec的进程忽略该信号。确切的讲,exec函数将原先设置为要捕捉的信号都更改为它们的默认动作,其他信号的状态不变。

2.进程创建

当一个进程调用fork时,其子进程继承父进程的信号处理方式。

三、可重入函数

可重入函数是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,去执行另外一段代码,返回时不会出现错误。

可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据受否会出错。

不可重入的原因:a)使用静态数据结构;b)调用malloc或free;c)标准I/O函数

【APUE】信号的更多相关文章

  1. APUE信号-程序汇总

    APUE信号-程序汇总      近期重看APUE,发现对于非常多程序的要领还是没有全然理解.所以梳理下便于查看,并且有非常多值得思考的问题. 程序清单10- 1  捕获 SIGUSR1 和 SIGU ...

  2. Linux下对后台进程通过kill传递信号不起作用的问题

    在阅读APUE信号一章时,我遇到Linux下对后台进程通过kill传递信号不起作用的问题 具体情形与如下链接中的老兄一致: http://bbs.csdn.net/topics/390335913?p ...

  3. (八) 一起学 Unix 环境高级编程 (APUE) 之 信号

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  4. APUE学习笔记——10.11~10.13 信号集、信号屏蔽字、未决信号

    如有转载,请注明出处:Windeal专栏 首先简述下几个概念的关系: 我们通过信号集建立信号屏蔽字,使得信号发生阻塞,被阻塞的信号即未决信号. 信号集: 信号集:其实就是一系列的信号.用sigset_ ...

  5. APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause

    转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int k ...

  6. APUE学习笔记——10信号——信号接口函数 signal 和 sigaction

    signal函数     signal函数是早起Unix系统的信号接口,早期系统中提供不可靠的信号机制.在后来的分支中,部分系统使用原来的不可靠机制定义signal函数,如 Solaris 10 .而 ...

  7. APUE学习笔记——10 信号

    信号的基本概念     信号是软件中断,信号提供了解决异步时间的方法.     每一中信号都有一个名字,信号名以SIG开头. 产生信号的几种方式     很多条件可以产生信号:     终端交互:用户 ...

  8. apue学习笔记(第十章 信号)

    本章先对信号机制进行综述,并说明每种信号的一般用法. 信号概念 每个信号都有一个名字,这些名字都以3个字符SIG开头.在头文件<signal.h>中,信号名都被定义为正整形常量. 在某个信 ...

  9. [10]APUE:信号

    [a] 常用信号 SIGABRT 调用 abort 函数时产生此信号,进程异常终止 SIGALRM 调用 alarm 或 setitimer 函数超时之后产生 SIGCHLD 子进程终止或 stop ...

  10. APUE学习之------------信号

    在学习一个东西的时候我总是喜欢去问这样做的理由是什么?也喜欢去究竟他的历史.从中你可以发现所有的设计都在不断改进出来的,从来就没有一个设计是一开始就是完美的.好比是人,之初,性也许是善的,如果我们不通 ...

随机推荐

  1. TIOJ1208 第K大连续和

    第k大的题一般都有点麻烦 pbds库的tree,需要研究一下https://codeforces.com/blog/entry/11080find_by_order() and order_of_ke ...

  2. 【转】密码学 :CSP的概念

    转:[密码学]CSP的概念 CSP加密服务提供者(Cryptographic Service Provider)具有一下几个特点: CSP是真正执行密码运算的独立模块 物理上一个CSP由两部分组成:一 ...

  3. Eclipse启动的时候提示:Failed to load JavaHL Library

    版本信息: Eclipse Project Release Notes Release 4.7.3 启动提示: Subclipse talks to Subversion via a Java API ...

  4. web即时通信技术

    ajax jsonp polling setInterval定期发送ajax请求.服务器压力大,浪费流量,大部分是无效请求 ajax long polling ajax发起请求,服务器对于这个请求一直 ...

  5. (二十二)python 3 sort()与sorted()

    Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列 一,最简单的排序 1.使用sort排序 my_list = [3 ...

  6. Github 多账号配置

    1. 不同账户,生成不同密钥ssh-keygen -t rsa -f github1 -C "xxx@163.com"ssh-keygen -t rsa -f github2 -C ...

  7. sql模糊查询,解除绑定的单号

    --610007570320-610007571319 1000张 delete from (select t.* from (select t1.bill_code, t1.bind_code, t ...

  8. Jmeter用于接口测试中,关联如何实现

    Jmeter用于接口测试时,后一个接口经常需要用到前一次接口返回的结果,应该如何获取前一次请求的结果值,应用于后一个接口呢,拿一个登录的例子来说明如何获取. 1.打开jmeter, 使用的3.3的版本 ...

  9. struts2 标签库使用

    [引用]json 使用 [引用]struts2 标签库使用 2011-05-11 16:13:00|  分类: 默认分类 |  标签: |举报 |字号大中小 订阅 本文转载自kangzye<st ...

  10. mappedBy的作用

    mappedBy的意思就是"被映射",即mappedBy这方不用管关联关系,关联关系交给另一方处理 1.规律:凡是双向关联,mapped必设,因为根本都没必要在2个表中都存在一个外 ...