信号用于通知进程发生了某件事情,可以由一个进程发给另一个进程,也可以由内核发个一个进程。

每个信号都有一个关联的行为,可以通过sigaction函数来设置一个信号的行为,有3种选择:

1、定义一个信号处理函数捕获信号,在信号发生时被调用。SIGKILL和SIGSTOP信号不能捕获

信号处理函数原型:void handler (int signo)

2、忽略信号,即把信号的行为设定为SIG_IGN,同样SIGKILL和SIGSTOP信号不能忽略

3、缺省行为,即把信号行为设定为SIG_DFL

signal函数:标准C的信号接口

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

加粗部分是函数名和参数列表,没加粗部分是函数的返回类型,返回一个参数是int,没有返回值的函数指针。

第一个参数是信号名,第二个参数是指向信号处理函数的指针,或为常值SIG_IGN或SIG_DFL

sigaction函数:POSIX标准信号接口

int sigaction (int signo, const struct sigaction *act, sigaciton *oact)

参数act定义了信号的行为

函数把信号先前的行为保存到参数oact所指的位置

struct sigaction {

  union{

  __sighandler_t sa_handler;                                             //SIG_IGN或SIG_DFL

  void (*_sa_sigaction)(int,struct siginfo *, void *);            //信号处理函数指针

  }_u

  sigset_t sa_mask;                    //该信号集中的信号被加入到进程的信号屏蔽字中,这些信号发生时会被阻塞而不会传递给进程

  unsigned long sa_flags;            //通过设置标志来控制信号处理函数的相关操作

  void (*sa_restorer)(void);         //暂没使用

  }

SIGCHLD信号的处理

一个进程终止时,会向它的父进程发送一个SIGCHLD信号

多进程程序中,如果有子进程处于僵死状态,会造成资源的浪费,所以需要捕获SIGCHLD信号,在信号处理函数中调用wait或者waitpid函数

处理僵死进程。

在网络程序中,捕获信号可能会中断系统调用。在系统调用被中断,且信号处理函数返回时,系统调用可能返回一个EINTR错误记录在errno中,

可以利用EINTR错误重启系统调用

SIGPIPE信号

当进程向一个已收到RST的套接口写数据时,内核向进程发送一个SIGPIPE信号,缺省行为是终止进程。所以进程有必要捕获这个信号,定义

想要的行为。

POSIX信号处理的更多相关文章

  1. libevent系列文章

    Libevent 2 提供了 bufferevent 接口,简化了编程的难度,bufferevent 实际上是对底层事件核心的封装,因此学习 bufferevent 的实现是研究 Libevent 底 ...

  2. unix network programming(3rd)Vol.1 [第2~5章]《读书笔记系列》

    13~22章 重要 第2章 传输层: TCP/ UDP / STCP (Stream Control Transmission Protocol) TCP 可靠,有重传机制,SYN队列号 UDP 不可 ...

  3. (转)Libevent(2)— event、event_base

    转自:http://name5566.com/4198.html 参考文献列表:http://www.wangafu.net/~nickm/libevent-book/ 此文编写的时候,使用到的 Li ...

  4. UNIX网络编程---TCP客户/服务器程序示例(五)

    一.概述 客户从标准输入读入一行文本,并写给服务器 服务器从网络输入读入这行文本,并回射给客户 客户从网络输入读入这行回射文本,并显示在标准输出上 二.TCP回射服务器程序:main函数 这里给了函数 ...

  5. 【unix网络编程第三版】阅读笔记(四):TCP客户/服务器实例

    本篇博客主要记录一个完整的TCP客户/服务器实例的编写,以及从这个实例中引发的对僵死进程的处理等问题. 1. TCP客户/服务器功能需求 本实例完成以下功能: (1) 客户从标准输入读入一行文本,并写 ...

  6. TCP客户/服务器程序实例——回射服务器

    目录 客户/服务器程序源码 POSIX信号处理 POSIX信号语义 处理SIGCHLD信号 处理僵死进程 处理被中断的系统调用 wait和waitpid函数 wait和waitpid函数的区别 网络编 ...

  7. UNP学习笔记(第五章 TCP客户/服务程序实例)

    我们将在本章使用前一章中介绍的基本函数编写一个完整的TCP客户/服务器程序实例 这个简单得例子是执行如下步骤的一个回射服务器: TCP回射服务器程序 #include "unp.h" ...

  8. 第5章-unix网络编程 TCP/服务端程序示例

    这一章主要是完成一个完整的tcp客户/服务器程序.通过一很简单的例子.弄清客户和服务器如何启动,如何终止,发生了某些错误会发生什么.这些事很重要的  客户端代码 #include "unp. ...

  9. UNP学习第五章(二)

    一.POSIX信号处理 信号:告知某进程发生了某个事件的通知(软中断),通常是异步的. 信号可以:由进程发给另一个进程,由内核发给某个进程. 设置信号处理办法,有三个选择: 1.写一个函数,在信号发生 ...

随机推荐

  1. Autocad 常用命令

    一律使用的简写 1:将多条线段合并成一条多线段[pe] 2:如果发现合并的多线段将自己不想合并的区域合并进去了,别担心,炸开就行了 [x] 3:如果画的线段太长工作区不适应,使用缩放命令.[scale ...

  2. 指定线程执行的顺序---join()

    线程T1,T2,T3分别启动,如何让其执行顺序变为T3>T2>T1: 线程1: package test6; public class Thread1 extends Thread{ pr ...

  3. bootstrap-导航条

    <body style="padding-top:50px"> <!-- navbar 导航条的基础样式 nav navbar-nav 导航条里菜单的固定样式组合 ...

  4. Bugtags 与其它产品的区别

    如果您刚刚接触 Bugtags,可能心里会有这样的疑问,下面将介绍 Bugtags 与其它的一些产品的区别. Bugtags 不是做统计的 SDK 大家都会在 App 里集成用户数据统计的 SDK,但 ...

  5. List集合中的对象根据属性排序

    集合类List存放的数据,默认是按照放入时的顺序存放的,比如依次放入A.B.C,则取得时候,则也是A.B.C的顺序,实际场景中,有时我们需要根据自定义的规则对List中的元素进行排序,该如何实现呢?看 ...

  6. 透视校正插值(Perspective-Correct Interpolation)

    在渲染器光栅化每个三角形的过程中,需要对根据顶点属性对三角形进行扫描线插值.此时由于投影面上顶点的2D坐标与顶点属性不成线性关系,因此是不能简单地使用线性插值来计算顶点属性的. 此时应当利用透视校正插 ...

  7. ubuntu Server 14 自动更新

    https://help.ubuntu.com/stable/serverguide/automatic-updates.html http://spin.atomicobject.com/2014/ ...

  8. 玩转单元测试之WireMock -- Web服务模拟器

    玩转单元测试之WireMock -- Web服务模拟器 WireMock 是一个灵活的库用于 Web 服务测试,和其他测试工具不同的是,WireMock 创建一个实际的 HTTP服务器来运行你的 We ...

  9. dbus

    http://blog.csdn.net/zyz511919766/article/details/7700498 http://maemo.org/maemo_training_material/m ...

  10. Ping 命令的使用方法总结

    一.Ping 命令 “Ping”命令是我们在判断网络故障常用的命令,但您真正明白这个命令运行后会发生什么,以及出现的各种信息说明了什么吗?其实熟练的掌握 Ping 命令的各种技巧可以帮助你解决很多网络 ...