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. MYSQL 命令行工具自动登录的方法

    MYSQL 命令行工具自动登录的方法 1. 需求提出 由于在linux 环境下,经常需要使用mysql(command-line tool) 终端连接到MYSQL DB服务. 其中大致的语法如下: m ...

  2. 想控制GIF图片动画播放吗?试试gifffer.js

    在线演示:http://www.gbtags.com/gb/demoviewer/3578/c6bec39a-61ae-4017-8e23-e0bc1eeb740f/example|index.htm ...

  3. Units specified don't exist SHSUCDX can't install

    重装系统,出现“Units specified don't exist SHSUCDX can't install”怎么办? 昨天,我们领导弄了个联想Thinkpad T510i的笔记本,本来预装的是 ...

  4. vsftpd 本地用户无法登陆 530 Login incorrect

    查看日志,监测用户无法登陆的错误日志 tail -f /var/log/secure 查看vsFTPd配置 /etc/vsftpd/vsftpd.conf 通过查看日志,发现用户的密码已经过期了... ...

  5. PHP 5 Math函数

    PHP 5 Math 函数 PHP Math 简介 Math 函数能处理 integer 和 float 范围内的值. 安装 PHP Math 函数是 PHP 核心的组成部分.无需安装即可使用这些函数 ...

  6. JUnit 3.8 演示递归删除文件目录的 测试类程序 .

    用递归方式来实现删除硬盘的文件或目录(空文件夹) 首先要找到递归的入口及出口,这点很重要,成败在此,呵呵! 代码实现: import java.io.File ; class RecursionDel ...

  7. ant design pro (三)路由和菜单

    一.概述 参看地址:https://pro.ant.design/docs/router-and-nav-cn 二.原文摘要 路由和菜单是组织起一个应用的关键骨架,我们的脚手架提供了一些基本的工具及模 ...

  8. IOS:Camera的特性分析与使用

    Camera是IOS中很重要的一个信息获取途径. 以下我们主要从硬件特性以及软件特性两个方面来看看Canera的使用,先来看看软件上我们使用Camera都能干点什么. 先来看看以下一张图: 相机软件部 ...

  9. Spring中bean的生命周期!

    Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一 ...

  10. Appium(JAVA)Windows 7系统搭建及示例运行

    Appium(JAVA)Windows 7系统搭建及示例运行 分类: Appium 2014-11-14 17:44 4323人阅读 评论(2) 收藏 举报 1.搭建Android环境 http:// ...