第10章信号总结

1 常见的信号

 不能被捕捉或忽略的信号:SIGKILL、SIGSTOP 杀死和停止一个进程的可靠方法

 SIGCHLD:进程终止或停止时,SIGCHLD信号发送给其父进程,系统默认忽略此信号

 SIGCONT:发送给处于停止状态需要继续运行的进程

 SIGHUP:终端接口断开连接时,此信号发送给该终端相关的控制进程(会话首进程)

 SIGINT:中断进程信号

 SIGQUIT:退出键

 SIGIO:指示异步I/O事件

 SIGPIPE:写已经读关闭的管道时产生此信号

 SIGPOLL:在一个可轮询设备上发生特定事件时产生此信号

 SIGTTIN:后台进程组试图读控制终端时产生此信号

 SIGTTOU:后台进程组试图写控制终端时产生此信号(可以选择允许后台进程组写控制终端,这种情况下不会产生此信号)

2 signal函数

 void (*signal(int signo,void (*func)(int)))(int)

 设置信号signo的处理函数,这种设置会被子进程继承,但是exec会破坏这种继承(因为进程空间都被替换了) 

 func常量值:SIG_IGN,SIG_DFL,表示忽略与默认

3 几个函数

#include <signal.h>
int kill(pid_t pid,int signo)
int raise(int signo)

 kill函数中,pid>0发送给特定进程pid,pid=0发送给同一进程组所有进程,pid<-1发送给进程组|pid|中所有进程,pid=-1发送给所有有权发送的进程

#include <unistd.h>
unsigned int alarm(unsigned int seconds)
int pause()

3 信号集sigset_t

#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(sigset_t *set,int signo)

int sigprocmask(int how,const sigset_t *set,sigset_t *oset)

 sigprocmask用来设置和查看当前进程的信号屏蔽字(通过set设置,通过oset返回原来的信号屏蔽字)

 how控制设置方式:SIG_BLOCK:将set中的信号加入当前信号屏蔽字

          SIG_UNBLOCK:将set中的信号从当前信号屏蔽字中删除

          SIG_SETMASK:进程的信号屏蔽字替换为set

int sigpending(sigset_t *set)

 sigpending函数通过set返回产生了但是被当前进程阻塞的进程

int sigaction(int signo,struct sigaction *act,struct sigaction *oact)

struct sigaction
{
    void (*sa_handler)(int);
    sigset_t sa_mask;
    int sa_flags;
    void (*sa_sigaction)(int,siginfo_t *,void *);
};

 sigaction函数比signal函数提供了关于某一信号的更多的设置(处理信号处理函数外)

 sa_handler是信号处理函数指针

 sa_mask是信号屏蔽字(执行该信号处理函数时,添加到信号屏蔽字中的信号,执行完信号处理函数后再回复信号屏蔽字)

 sa_flags一些处理选项

 sa_sigaction是替代信号处理函数指针,sa_flags中制定了某些选项后将以sa_sigaction指向的函数作为信号处理函数

#include <setjmp.h>
int sigsetjmp(sigjmp_buf env,int savemask)
int siglongjmp(sigjmp_buf env,int val)

 sigsetjmp比setjmp函数增加了savemask标志,指明是否保存当前的信号屏蔽字

int sigsuspend(const sigset_t *sigmask)

 将进程的信号屏蔽字设置为sigmask并挂起,直到捕捉到某个信号并从信号处理程序返回,结束挂起并恢复信号屏蔽字

时间: 2024-10-11 18:46:23

第10章信号总结的相关文章

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

1.引言 信号是软件中断. 信号提供了一种处理异步事件的方法. 2. 信号概念 信号的名字都是以3个字符SIG开头. Linux3.2.0支持31种信号.FreeBSD.Linux和Solaris作为实时扩展都支持另外的应用程序定义的信号. 在头文件signal.h(其中include的bits/signum.h)中,信号名都被定义为正整数常量,不存在编号为0的信号.kill函数对信号编号0有特殊的应用. 很多条件可以产生信号: 用户按下某些终端键时:Ctrl+C.Ctrl+\.Ctrl+Z 硬

apue 第10章 信号signal

每种信号都有名字,都是以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> #includ

UNIX环境高级编程第10章信号10.3singal函数

// signals/sigusr.c 10-1 #include "apue.h" static void sig_usr(int); /* one handler for both signals */ int main(void) { if (signal(SIGUSR1, sig_usr) == SIG_ERR) { err_sys("can't catch SIGUSR1"); } if (signal(SIGUSR2, sig_usr) == SIG_E

第10章 系统级I/O

第10章 系统级I/O 10.1 Unix I/O 一个Unix文件就是一个m个字节的序列:B0,B1,…,BK,…,Bm-1 Unix I/O:一种将设备优雅地映射为文件的方式,允许Unix内核引出一个简单.低级的应用接口,这使得所有的输入输出都能以一种统一且一致的方式来执行: 打开文件: 内核返回一个小的非负整数,叫做描述符. Unix外壳创建的每个进程开始时都有三个打开的文件:标准输入(描述符为0).标准输出(描述符为1).标准错误(描述符为2). 改变当前文件位置: 对于每个打开的文件,

第10章神经网络基础

第10章神经网络基础 在本章中,我们将深入研究神经网络(neural networks)的基础.我们将首先讨论人工神经网络,以及它们是如何从我们自己身体中的真实生物神经网络中得到启发的.之后,我们将回顾经典的感知器算法(Perceptron algorithm)以及它在神经网络历史中的作用. 构建了感知器,我们将学习BP算法(backpropagation algorithm),这是现代神经网络的基石.我们将使用python从头实现BP算法,确保我们理解了这个重要的算法. 当然,现代神经网络库如

[摘录]第10章 培养胜过对手的力量

第五部分 谈判高手 优势秘籍力量.控制和影响,是每个人与别人交往时都会追求这些东西.不是吗?在进行谈判时,那些最有影响力火灾是最有力量的一方往往会在谈判时迫使对手做出更多的让步.如果你甘心让对手来操纵或影响你的话,显然你就很可能得不到自己想要的结果.另一方面,如果你直到哪些因素,能影响你的对手,并知道如何使用一些具体的方法来形成这种影响力,你就可以将形势控制在自己手中.权力本身也可以成为一种非常富有建设性的力量,当我们谈论权力时,我并不是指独裁者们用来祸害平民们的那种权力,我所说的权力实际上是一

10-11-基数排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第10章  内部排序 - 基数排序 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.Scanf.c        相关测试数据下载  链接? 数据

读《构建之法》第8、9、10章有感

第8章  需求分析 软件需求 用户的需求五花八门,作为一个软件团队要准确而全面地获取这些需求主要有以下四个步骤: 获取和引导需求.这一步骤也被叫做“需求捕捉”.软件团队需要为用户着想,设身处地,为用户引导出需求. 分析和定义需求.从各个方面获取的需求进行规整,定义需求的内涵从各个角度将需求量化. 验证需求.软件团队要跟利益相关者沟通,通过分析报告.技术原型.用户调查或演示等形式向他们验证软件团队对于这些需求的认知. 在软件产品的生命周期中管理需求. 竞争性需求分析的框架:1.N(需求) 2.A(

敏捷软件开发:原则、模式与实践——第10章 LSP:Liskov替换原则

第10章 LSP:Liskov替换原则    Liskov替换原则:子类型(subtype)必须能够替换掉它们的基类型(base type). 10.1 违反LSP的情形 10.1.1 简单例子 对LSP的违反导致了OCP的违反: struct Point { double x, y;} public enum ShapeType { square, circle }; public class Shape { private ShapeType type; public Shape(Shape