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

每个信号都有一个关联的行为,可以通过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. java对象序列化byte[] and byte[]反序列化对象--转

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...

  2. JUQERY 获取同名称的所有CHECKBOX ,获取已经选择的,并且jquery进行勾选!

    var @(Perfix)_CheckArray=[]; @(Perfix)_CheckArray.length=0; var checkedItems = $('input[name="@ ...

  3. ios实现屏幕旋转的方法

    1.屏蔽AppDelegate下面的屏幕旋转方法 #pragma mark - 屏幕旋转的 //- (UIInterfaceOrientationMask)application:(UIApplica ...

  4. @Override报错

    仔细看了下项目 , 是因为有人把project的信息传上来了 , 使用编译的JDK变成了1.5(难道是因为他的1.8的版本我没有 ?) , 右键项目, 选property , 把compiler变成1 ...

  5. PyCharm、IntelliJ IDEA等jetbrains软件授权服务器

    Paste_Image.png 图上链接:http://idea.qinxi1992.cnhttp://blog.lanyus.com/archives/174.htmlhttp://www.idea ...

  6. 什么是BOM头,及PHP解决办法

    类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM).它是一串隐藏的字符,用于让记事本等编辑器识别 ...

  7. DCC Software and Graphics System

    After working with DCC software for so many years, I saw the realtime solution went forward so much, ...

  8. qt编程入门

    面对qt编程,必须先知道qt中常用的类: QPushButton按钮类.QLabel标签类.QMessageBox对话框类.QCheckBox.QAction.QMenu.QStatusBar.QTo ...

  9. JS语法(二)

    JS变量 var 变量名 = 变量值://自己会判断什么类型 一个好的编程习惯是,在代码开始处,统一对需要的变量进行声明. var name = “xiaosan”, age = 22, addres ...

  10. ssh通道技术

    所有机器均为Linux操作系统.   机器是A,中间服务器为B,目标服务器是C. 从A可以ssh到B,从B可以ssh到C,但是A不能直接ssh到C. 现在展示利用ssh通道技术从A直接传输文件到C. ...