linux信号处理 --和信息相关的几个系统调用

一、sigaction函数

#include <signal.h>

int sigaction(int sig,const struct sigaction* act,strcut sigaction* oact);

sig参数指出要捕获的信号类型,act参数指定新的信号处理方式,oact参数则输出信号先前的处理方式(如果不为NULL的话),act和oact都是sigaction结构体类型的指针

信号集函数

#include <signal.h>

int sigemptyset(sigset_t* _set)

int sigfillset(sigset_t* _set)

int sigaddset(sigset_t* _set,int signo)

int sigdelset(sigset_t* _set,int signo)

int sigismember(const siggset_t* set,int signo)

进程信号掩码

指定进程的信号掩码,这样这样的信号就不能发送给本进程

int sigprocmask(int _how,const sigset_t* set,sigset_t* oset);

how参数的类型

SIG_BLOC   新的进程掩码是其当前值和_set指定信号集的并集

SOG_UNBLOCK 新的进程信号掩码是其当前值和~_set信号集的交集,因此_set指定的信号集将不被屏蔽

SIG_SETMASK  直接将进程掩码设置为_set

被挂起的信号

设置进程信号掩码后,被屏蔽的信号将不能被进程接受,如果给进程发送一个被屏蔽的信号,则操作系统将该信号设置为进程的一个被挂起的信号,如果我们取消对该信号的屏蔽,则它能立即被进程接收到,如下函数可以获得进程当前被挂起的信号集

int sigpending(sigset_t* set);

进程即使多次接收到同一个被挂起的信号,sigpending函数也只能反映一次,并且当我们再次使用sigprocmask使能该挂起的信号时,该信号的处理函数也只被触发一次。

几个特殊的和网络编程有关的信号:

SIGHUP:

当挂起进程的控制终端时,SIGHUP信号被触发,对于没有控制终端的网络后台程序而言,他们通常利用SIGHUP信号来强制服务器重读配置文件

SIGPIPE

默认情况下,往一个读端关闭的管道或socket连接中写数据将引发SIGPIPE信号,SIGPIPE默认欣慰是结束进程,需要修改这样的默认行为。

我们也可以利用I/O复用系统调用来检测管道和socket连接的读端是否已经关闭。以poll为例子,当管道的读端关闭时,写端文件描述符上的POLLHUP事件将被触发,当socket连接被对方关闭时,socket上的POLLRDHUP事件将被触发

时间: 2024-11-07 02:29:07

linux信号处理 --和信息相关的几个系统调用的相关文章

查看Linux系统版本信息相关指令

Linux下如何查看版本信息, 包括位数.版本信息以及CPU内核信息.CPU具体型号等等,整个CPU信息一目了然. 1.# uname -a   (Linux查看版本当前操作系统内核信息) Linux localhost.localdomain 2.4.20-8 #1 Thu Mar 13 17:54:28 EST 2003 i686 athlon i386 GNU/Linux 2.# cat /proc/version (Linux查看当前操作系统版本信息) Linux version 2.4

linux lsmod命令 及相关信息

lsmod  (list modules) 语法:lsmod 功能: lsmod命令:是一个小程序,用来显示文件.proc/modules的信息,也就是显示当前内核模块装载的模块. 补充说明: 执行lsmod指令,会列出所有已载入系统的模块.Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放入核心.您可以将这些功能编译成一个个单独的模块,待需要时再分别载入. lsmod命令显示的当前内核已经加载的模块和驱动.以下面行为例: scsi_mod             

linux查看硬件信息及驱动设备相关整理

查看声卡设备:cat /proc/asound/cards 查看USB设备:cat /proc/bus/usb/devices 常用命令整理如下:用硬件检测程序kuduz探测新硬件:service kudzu start ( or restart)查看CPU信息:cat /proc/cpuinfo查看板卡信息:cat /proc/pci查看PCI信息:lspci (相比cat /proc/pci更直观)查看内存信息:cat /proc/meminfo查看USB设备:cat /proc/bus/u

linux信号处理相关知识

因为要处理最近项目中碰上的多个子进程退出信号同时到达,导致程序不当产生core的情况,今天我花了时间看了一些关于linux信号处理的博客. 总结一下:(知识未经实践) 1 1 linux信号分两种,一种实时信号(也叫可靠信号),一种非实时信号(也叫不可靠信号). 2 2 实时信号之所以是可靠的,因为在进程阻塞该信号的时间内,发给该进程的所有实时信号会排队,而非实时信号则会合并为一个信号.(可以这样理解,同一个不可靠信号同时产生时,只有一个信号会被处理,其它的丢弃) 3 3 早期设计的信号都是不可

linux 信号处理 二

[摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核对于信号的处理流程包括信号的触发/注册/执行及注销等.最后介绍了应用层的相关处理,主要包括信号处理函数的安装.信号的发送.屏蔽阻塞等,最后给了几个简单的应用实例. [关键字]软中断信号,signal,sigaction,kill,sigqueue,settimer,sigmask,sigprocmask,sigset_t 1       信

linux 信号处理 三

一.信号及信号来源 信号本质 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达. 信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了.信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还可以传递附加信息. 信号来源 信号事件的发生有两个来源:硬件来源(比如我们按下了键盘或者其它

Linux基础--进程管理相关命令介绍(2)

本文主要介绍了Linux中进程管理的相关命令,涉及到的主要命令有top,vmstat等. (1)top ①功能:用来查看CPU,内存以及进程的状态. ②用例: ③相关注释: load average表示负载,三个数值分别表示第1分钟,第5分钟,第10分钟 Cpu中us表示用户空间程序占用百分比,sy表示内核模式占用百分比,ni表示调整NICE值所占用的    CPU百分比,id表示CPU的空闲比例,wa表示等待磁盘IO完成所占用的时间比例,hi表示硬件中断占     据的百分比,si表示软中断所

linux系统-用户管理-相关配置文件

linux系统-用户管理-相关配置文件 一 配置文件 1 用户信息文件:/etc/passwd 2 密码文件:/etc/shadow 3 用户组信息文件:/etc/group 4 用户组密码文件:/etc/gshadow 5 用户配置文件:/etc/login.defs     /etc/default/useradd 6 新用户的信息文件:/etc/skel 7 登陆信息文件:/etc/motd和/etc/issue 二 my_qq 872785786 及相应的网盘资料链接:http://pa

linux中Makefile文件相关内容

第一章.概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional(专业)的程序员,makefile还是要懂.这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义.特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力.因为,makefile关系到了整个