signal

man 7 signal

1.kill -l 显示所有信号

kill -signal PID

killall -signal name

2.产生信号

ctrl+c => SIGINT

ctrl+\ => SIGQUIT

ctrl+z => SIGTSTP

信号9(SIGKILL),19(SIGSTOP)不能被阻塞(进程中可屏蔽两信号sigaddset()不报错,但不起作用),不能被忽略,也不能注册信号处理函数(直接报错)。

信号共计SIGRTMAX个,其中32,33无信号,

if(sigi == SIGKILL || sigi == SIGSTOP || sigi == 32 || sigi == 33)

kill命令默认发送信号15(SIGTERM)。

3.系统默认信号处理方式

  • linux对每种信号都规定了默认动作,具体可参考man 7 signal
  • SIGCHLD 忽略
  • 实时信号的缺省反应是结束进程。
  • 如果不想程序采用默认动作处理进程,需要捕捉函数(为想要特殊处理的函数指定信号处理函数)。如发生SIGALARM或SIGPIPE,进行超时处理即可,不必终止进程。此外若想发生信号时做特殊处理也应指定信号处理函数,如发生段错误时,提示用户等。

4.操作函数

  • kill

#include <signal.h>

int kill(pid_t pid, int signo);

  • raise自发信号

int raise(int signo);

  • abort 自发SIGABRT信号,终止

void abort(void);

  • alarm闹钟

unsigned int alarm(unsigned int sec);

原来没有调度alarm返回0或以前设定的闹钟时间还剩多少秒。如果sec为0,表示取消以前设定的闹钟,返回剩余的秒数。

5.阻塞信号集函数

每个进程都有一个用来描述哪些信号递送到进程时将被阻塞的信号集,该信号集中所有信号在递送到进程后都将被阻塞。

阻塞信号集也叫当前进程的信号屏蔽字(signal Mask)。

#include <signal>

int sigemptyset(sigset_t *set);置0

int sigfillset(sigset_t *set);置1

int sigaddset(sigset_t *set, int signum);某位置1

int sigdelset(sigset_t *set, int signum);某位置0

成功0,失败-1.

int sigismember(const sigset_t *set, int signum);

包含该位返回1,不包含返回0,错误返回-1.

6.信号集函数

int sigpromask(int how, const sigset_t *set, sigset_t *oset);

成功返回0,失败返回-1;

how:SIG_BLOCK +, SIG_UNBLOCK -, SIG_SETMASK.

int sigpending(sigset_t *set);

读取未决信号集。

成功0,失败-1。

注:实际执行信号的处理动作称为信号递达(Delivery);未决(信号从产生到递达之间)。

int pause(void);

pause函数使调用进程挂起直到有信号递达。信号的处理动作是终止进程,则进程终止,pause不能返回;忽略,则进程处于挂起状态,pause不返回;捕抓,则调用信号处理函数后pause返回-1,errno置为EINTR。

pause只有出错的返回值。

int sigsuspend(const sigset_t *sigmask);

和pause一样,无成功返回值。

只有执行了一个信号处理函数后,sigsuspend才返回,返回-1,errno置为EINTR。

注:sigsuspend临时用sigmask取代信号屏蔽字,挂起进程。调用sigsuspend时应将想获取的信号从原来的信号屏蔽子中移除填充到sigmask中。

可参考:

http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html

http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index2.html

signal基础的更多相关文章

  1. Perl信号处理

    本文关于Perl信号处理的内容主体来自于<Pro Perl>的第21章. 信号处理 操作系统可以通过信号(signal)处理机制来实现一些功能:程序注册好待监视的信号处理机制,在程序运行过 ...

  2. 异步处理方式之信号(一):基础知识和signal函数说明

    文章目录 1. 引言 2. 信号的概念 2.1 信号操作之忽略信号 2.2 信号操作之捕捉信号 2.3 信号操作之执行系统默认操作 2.4 常见的信号 3. 函数signal 3.1 signal函数 ...

  3. Java并发基础框架AbstractQueuedSynchronizer初探(ReentrantLock的实现分析)

    AbstractQueuedSynchronizer是实现Java并发类库的一个基础框架,Java中的各种锁(RenentrantLock, ReentrantReadWriteLock)以及同步工具 ...

  4. Linux 信号(二)—— signal 函数

    弗洛伊德认为:要解决这些苦恼,当事人就要通过回忆并理解自己早期的童年经历,来获得对潜意识冲突的顿悟.弗洛伊德的疗法被称为“精神分析” (psychoanalysis),在 20 世纪的很长一段时间被心 ...

  5. Pyqt 基础功能

    总结Pyqt的基础知识 1. Pyqt  设置禁止最大化及禁止拖拽窗口大小 # PyQT禁止窗口最大化按钮: self.setWindowFlags(QtCore.Qt.WindowMinimizeB ...

  6. C++基础_总结

    (1)多态性都有哪些?(静态和动态,然后分别叙述了一下虚函数和函数重载) 多态分为两种:静态和动态.静态主要包括函数重载和模板:动态主要是依靠虚函数实现的. 静态联编:重载函数不加virtual关键字 ...

  7. 【深入浅出Linux网络编程】 “基础 -- 事件触发机制”

    回顾一下“"开篇 -- 知其然,知其所以然"”中的两段代码,第一段虽然只使用1个线程但却也只能处理一个socket,第二段虽然能处理成百上千个socket但却需要创建同等数量的线程 ...

  8. Nginx概念及基础安装--详细讲解

    1.主要内容: Nginx的基础           特性           配置部署           优化(了解) 2.Nginx 是什么? Nginx是一个开源的,支持高性能,高并发的www ...

  9. First step to Signal —— in Linux C Programing

    1. What's signal 信号是软件中断,提供了一种处理异步事件的方法.(见<Unix环境高级编程>)一般使用时需包含 signal.h 库. 每个信号命名由SIG开头,实际值为正 ...

随机推荐

  1. [置顶] CSS语言精粹

    本文主要是对CSS中一些比较重要的高级部分作了一些整理,这些内容也许不是经常使用,但是都很强大.本文将长期更新. 边框 CSS2.1 规定:元素的背景是内容.内边距和边框区的背景.设置背景颜色时是没有 ...

  2. ORCU浅析之安装和作用

    众所周知,在安装Oracle BIEE之前需要安装Oracle RCU(Oracle Repository Creation Utility),美其名曰资料档案库.如果单单的从名称上来说,那就是我们实 ...

  3. SVG报错error on line 39 at column 26: Namespace prefix xlink for href on script is not defined

    转自:http://stackoverflow.com/questions/3561270/error-on-line-39-at-column-26-namespace-prefix-xlink-f ...

  4. 谋哥:《App自推广》开篇之回到远古人类

    [谋哥每天一干货.第六十八篇] 这两天帮谋天团的杨整体验他的App--"闪聊"的内測新版,改版后这款App命名为"美丫",一款致力于打造国内首款专注于女性社交的 ...

  5. URL转发

    原理:iframe 代码: <?php if($_SERVER['HTTP_HOST']=="i.mansions.com.cn"){ $html = <<< ...

  6. Project Euler 001-006 解法总结

    Problem 1. Find the sum of all the multiples of 3 or 5 below 1000.   题目要求找出所有1000以下的3或者5的倍数之和.   最简便 ...

  7. The application is in break mode

    在安装使用Visual Studio 2017后,当代码出现异常的时候,它没有调到代码出错的地方,显示了下图.. 解决办法:打开 Debug——>Options——>,勾上 Use Man ...

  8. 算法笔记_137:二分图的最大匹配(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 何为二分图的最大匹配问题? 引用自百度百科: 首先得说明一下何为匹配: 给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于 ...

  9. SqlServer字段说明查询及快速查看表结构

    SqlServer字段说明查询 SELECT t.[name] AS 表名,c.[name] AS 字段名,cast(ep.[value] )) AS [字段说明] FROM sys.tables A ...

  10. 〖Android〗/system/etc/fallback_fonts.xml

    <?xml version="1.0" encoding="utf-8"?> <!-- Fallback Fonts This file sp ...