每种信号都有名字,都是以SIG开头

信号机制最简单的接口是signal函数

#include <signal.h>

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);
返回值:成功以前的信号处理配置,出错SIG_ERR

kill函数将信号发送给进程或进程组。raise函数则允许进程向自身发送信号

#include <sys/types.h>
#include <signal.h> int kill(pid_t pid, int sig); int raise(int sig);
返回值:成功0,出错-

使用alarm可以设置一个定时器,在将来的某个时刻该定时器会超时

#include <unistd.h>

unsigned int alarm(unsigned int seconds);
返回值:0或以前设置的闹钟时间的余留秒数

pause函数使调用进程挂起直至捕捉到一个信号

#include <unistd.h>

int pause(void);
返回值:-,errno设置EINTR

我们需要一个能表示多个信号的-----信号集

#include <signal.h>

int sigemptyset(sigset_t *set);
int sigfillset(sigset_t *set);
int sigaddset(sigset_t *set, int signum);
int sigdelset(sigset_t *set, int signum);
返回值:成功0,出错-
int sigismember(const sigset_t *set, int signum);
返回值:真返回1,假0

检测或更改,或同时进行检测和更改进程的信号屏蔽字

#include <signal.h>

int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
返回值:成功0,出错-

返回一信号集,该信号通过set参数返回

#include <signal.h>

int sigpending(sigset_t *set);
返回值:成功0,出错-

功能是检查或修改与指定信号相关联的处理动作。

#include <signal.h>

int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
返回值:成功0,出错-

非局部转移函数

#include <setjmp.h>

int setjmp(jmp_buf env);

int sigsetjmp(sigjmp_buf env, int savesigs);
返回值:直接调用0,若从siglongjmp调用返回,则为非0
void longjmp(jmp_buf env, int val0;
void siglongjmp(sigjmp_buf env, int val);

在运行pause中,信号可能会丢失。为了纠正问题,需要在院子操作中先恢复信号屏蔽字,然后休眠。

#include <signal.h>

int sigsuspend(const sigset_t *mask);
返回值:-1,并将errno设置为EINTR

终止异常的工作

#include <stdio.h>

void abort(void);
返回值:不返回

睡眠函数,但是都有缺陷

#include <unistd.h>

unsigned int sleep(unsigned int seconds);
返回值:0或未休眠完的秒数

nanosleep函数与sleep函数类似,提供了纳秒级精度

#include <time.h>

int nanosleep(const struct timespec *req, struct timespec *rem);
返回值:休眠到要求的时间,返回0,出错-

需要使用相对于特定时钟的延迟时间来挂起调用线程。

#include <time.h>

int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *request, struct timespec *remain);
返回值:休眠要求的时间,返回0,出错返回错误码

使用sigqueue函数发送信号

#include <signal.h>

int sigqueue(pid_t pid, int sig, const union sigval value);
返回值:成功0,出错-

可以使用psinal函数可移植的打印与信号编号对应的字符串

#include <signal.h>

void psignal(int sig, const char *s0;
void psiginfo(const siginfo_t *pinfo, const char *s);

如果只需要信号的描述部分,与不需要把它写到标准错误文件中

#include <string.h>

char *strsignal(int sig);
返回值:指向描述该信号的字符串的指针

apue 第10章 信号signal的更多相关文章

  1. UNIX环境高级编程 第10章 信号

    SIGSTOP和SIGKILL区别是:前者是使进程暂时停止,即中止,也就是说使进程暂停,将进程挂起,比如你在终端里面执行一个脚本或者程序,执行到一半,你想暂停一下,你按下ctrl+z,就会导致终端发送 ...

  2. 《Unix环境高级编程》读书笔记 第10章-信号

    1.引言 信号是软件中断. 信号提供了一种处理异步事件的方法. 2. 信号概念 信号的名字都是以3个字符SIG开头. Linux3.2.0支持31种信号.FreeBSD.Linux和Solaris作为 ...

  3. 【APUE | 10】函数signal

    函数signal 函数signal介绍 typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t ...

  4. APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause

    转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int k ...

  5. apue第七章学习总结

    apue第七章学习总结 1.main函数 程序是如何执行有关的c程序的? C程序总是从main函数开始执行.main函数的原型是 int main(int argc,char *argv[]); 其中 ...

  6. Linux进程间通信(一): 信号 signal()、sigaction()

    一.什么是信号 用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中 ...

  7. 第10章 系统级I/O

    第10章 系统级I/O 10.1 Unix I/O 一个Unix文件就是一个m个字节的序列:B0,B1,…,BK,…,Bm-1 Unix I/O:一种将设备优雅地映射为文件的方式,允许Unix内核引出 ...

  8. apue第四章学习总结

    apue第四章学习总结 4.1.若以stat函数去替换lstat函数,会发生: 原来的目录路径: $:~/workspace/apue2/include$ ls -l apue.h abc lrwxr ...

  9. Linux就这个范儿 第10章 生死与共的兄弟

    Linux就这个范儿 第10章 生死与共的兄弟 就说Linux系统的开机.必须经过加载BIOS.读取MBR.Boot Loader.加载内核.启动init进程并确定运行等级.执行初始化脚本.启动内核模 ...

随机推荐

  1. 因为信仰,油画专业的他自学开发进击阿里技术P9

    大约在1年以前,阿里云视频云团队来了一位热心和气.爱好广泛的老干部新同学,他就是资深技术专家郝冲,花名和招,寓意“和气招财”. 有人说程序员只喜欢安静地写代码,和招偏偏一个户外运动爱好者.他擅长滑雪, ...

  2. 转载 ldd3环境配置

    ldd3(<linux设备驱动程序>)里面使用的正是Linux2.6.10内核,如果内核不同,使用课本里的代码会出现各种问题,所以搭建与课本一样内核版本的环境,用来学习. 尝试过使用ubu ...

  3. Vue响应式原理的实现-面试必问

    Vue2的数据响应式原理 1.什么是defineProperty? defineProperty是设置对象属性,利用属性里的set和get实现了响应式双向绑定: 语法:Object.definePro ...

  4. Delphi 自带了 Base64 编解码的单元

    Delphi 自带了 Base64 编解码的单元,叫 EncdDecd,这名字很拗口而且不直观,估计这是一直很少人关注和知道的原因.  这个单元提供两套四个公开函数:  对流的编解码: procedu ...

  5. Key Set

    http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1011&cid=594 Key Set Time Limit: 2000 ...

  6. 【HTTP】http请求url参数包含+号,被解析为空格

    项目技术:Angular 6 问题现象:接口传参的时候,使用 httpClient.post 方法提交数据,字段中包含+号被解析成空格,提交数据错误 解决过程: 1.http请求中包含+号,会被自动解 ...

  7. JavaScript 类型浅解

    对于JavaScript 类型,可简单地概括为:相对于强类型语言来说,它是弱(松散)类型的语言:有基本类型和引用类型,他们是区别是一个有固定空间存在于栈内存中,一个没有固定空间保存在堆内存中并且在栈内 ...

  8. javascript中call(),apply()用法

    ​ //上下文模式:根据用户传递的参数产生不同的结果 //实现方式:call/apply:这两个都是定义在Function.prototype.call——>目的:任何函数都可以访问到call/ ...

  9. Linux(Ubuntu)常用命令(二)

    归档管理: 打包: tar -cvf xxx.tar 打包对象 (一般来说就是 -cvf 一起用)但这种不压缩的打包通常不用,接下来会说. -options:-c    生成档案文件,创建打包文件. ...

  10. Numpy的基本运算及操作

    import numpy as np ''' 一.算术运算 元素级 1.标量 加减乘除 数组(元素级:位置对应) 自增和自减 通用函数 2.数组 +-*/ 数组 (元素级) 3.条件和布尔运算 a&g ...