首先说明函数指针的定义形式:
     <存储类型> 数据类型 (* 函数指针名) (参数表);
    其中存储类型一般不写,用默认形式。可以选auto型、static型和extern型等。数据类型是指针所指向函数返回值的数据类型。参数表是指向函数的参数表。
 
再说明一个函数的返回值是一个函数指针(可理解为此函数A实际返回的是一个指向另一个函数B的指针)的定义形式:
    <存储类型> 数据类型 (* 函数名(参数表1))(参数表2);


表头文件 #include<signal.h>  
功 能:
设置某一信号的对应动作   
函数原型 :
void (*signal(int signum,void(* handler)(int)))(int);   
或者:typedef void(*sig_t) ( int );   sig_t signal(int signum,sig_t handler);   
参数说明:  
第一个参数signum指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTOP外的任何一种信号。  
第二个参数handler描述了与信号关联的动作,它可以取以下三种值:   
(1)一个返回值为正数的函数地址  此函数必须在signal()被调用前申明,handler中为这个函数的名字。当接收到一个类型为sig的信号时,就执行handler 所指定的函数。这个函数应有如下形式的定义:   intfunc(int sig);   sig是传递给它的唯一参数。执行了signal()调用后,进程只要接收到类型为sig的信号,不管其正在执行程序的哪一部分,就立即执行func()函数。当func()函数执行结束后,控制权返回进程被中断的那一点继续执行。  
(2)SIGIGN   这个符号表示忽略该信号,执行了相应的signal()调用后,进程会忽略类型为sig的信号。   
(3)SIGDFL   这个符号表示恢复系统对信号的默认处理。   
函数说明 :   signal()会依参数signum 指定的信号编号来设置该信号的处理函数。当指定的信号到达时就会跳转到参数handler指定的函数执行。当一个信号的信号处理函数执行时,  如果进程又接收到了该信号,该信号会自动被储存而不会中断信号处理函数的执行,直到信号处理函数执行完毕再重新调用相应的处理函数。但是如果在信号处理函数执行时进程收到了其它类型的信号,该函数的执行就会被中断。  
返回值: 返回先前的信号处理函数指针,如果有错误则返回SIG_ERR(-1)。   
附加说明 :在信号发生跳转到自定的handler处理函数执行后,系统会自动将此处理函数换回原来系统预设的处理方式,如果要改变此操作请改用sigaction()。 

 
下面的情况可以产生Signal:  
1. 按下CTRL+C产生SIGINT   
2. 硬件中断,如除0,非法内存访问(SIGSEV)等等   
3. Kill函数可以对进程发送Signal   
4. Kill命令。实际上是对Kill函数的一个包装   
5. 软件中断。如当Alarm Clock超时(SIGURG),当Reader中止之后又向管道写数据(SIGPIPE),等等   
 
2 Signals:

Signal Description
SIGABRT 由调用abort函数产生,进程非正常退出
SIGALRM 用alarm函数设置的timer超时或setitimer函数设置的interval timer超时
SIGBUS 某种特定的硬件异常,通常由内存访问引起
SIGCANCEL 由Solaris Thread Library内部使用,通常不会使用
SIGCHLD 进程Terminate或Stop的时候,SIGCHLD会发送给它的父进程。缺省情况下该Signal会被忽略
SIGCONT 当被stop的进程恢复运行的时候,自动发送
SIGEMT 和实现相关的硬件异常
SIGFPE 数学相关的异常,如被0除,浮点溢出,等等
SIGFREEZE Solaris专用,Hiberate或者Suspended时候发送
SIGHUP 发送给具有Terminal的Controlling Process,当terminal被disconnect时候发送
SIGILL 非法指令异常
SIGINFO BSD signal。由Status Key产生,通常是CTRL+T。发送给所有Foreground Group的进程
SIGINT 由Interrupt Key产生,通常是CTRL+C或者DELETE。发送给所有ForeGround Group的进程
SIGIO 异步IO事件
SIGIOT 实现相关的硬件异常,一般对应SIGABRT
SIGKILL 无法处理和忽略。中止某个进程
SIGLWP 由Solaris Thread Libray内部使用
SIGPIPE 在reader中止之后写Pipe的时候发送
SIGPOLL 当某个事件发送给Pollable Device的时候发送
SIGPROF Setitimer指定的Profiling Interval Timer所产生
SIGPWR 和系统相关。和UPS相关。
SIGQUIT 输入Quit Key的时候(CTRL+\)发送给所有Foreground Group的进程
SIGSEGV 非法内存访问
SIGSTKFLT Linux专用,数学协处理器的栈异常
SIGSTOP 中止进程。无法处理和忽略。
SIGSYS 非法系统调用
SIGTERM 请求中止进程,kill命令缺省发送
SIGTHAW Solaris专用,从Suspend恢复时候发送
SIGTRAP 实现相关的硬件异常。一般是调试异常
SIGTSTP Suspend Key,一般是Ctrl+Z。发送给所有Foreground Group的进程
SIGTTIN 当Background Group的进程尝试读取Terminal的时候发送
SIGTTOU 当Background Group的进程尝试写Terminal的时候发送
SIGURG 当out-of-band data接收的时候可能发送
SIGUSR1 用户自定义signal 1
SIGUSR2 用户自定义signal 2
SIGVTALRM setitimer函数设置的Virtual Interval Timer超时的时候
SIGWAITING Solaris Thread Library内部实现专用
SIGWINCH 当Terminal的窗口大小改变的时候,发送给Foreground Group的所有进程
SIGXCPU 当CPU时间限制超时的时候
SIGXFSZ 进程超过文件大小限制
SIGXRES Solaris专用,进程超过资源限制的时候发送

  1、不要使用低级的或者STDIO.H的IO函数  2、不要使用对操作  3、不要进行系统调用   4、不是浮点信号的时候不要用longjmp   5、singal函数是由ISO C定义的。因为ISO C不涉及多进程,进程组以及终端I/O等,所以他对信号的定义非常含糊,以至于对UNIX系统而言几乎毫无用处。  备注:因为singal的语义于现实有关,所以最好使用sigaction函数替代本函数。

linux编程下signal()函数相关推荐

  1. Linux编程下open()函数的用法

    Linux编程下open()函数的用法 open(打开文件)  相关函数:  read,write,fcntl,close,link,stat,umask,unlink,fopen 表头文件 : #i ...

  2. linux编程取消wait函数,Linux编程基础之进程等待(wait()函数).pdf

    Linux编程基础之进程等待(wait()函数) 编程过程中,有时需要让一个进程等待另一个进程 ,最常见的是父进程等待自己的子进程 ,或者父进程回收自己 的子进程资源包括僵尸进程.这里简单介绍一下系统 ...

  3. Linux信号之signal函数

    1. 信号概述 何为信号:信号就是由用户.系统或进程发送给目标进程的信息,以通知目标进程中某个状态的改变或是异常. 信号产生:总体来说,其产生的条件有两种,分别是:硬件和软件原因,又称为:硬中断和软中 ...

  4. Linux操作系统下信号处理函数

    Linux系统下的信号 一.信号概念 1. 什么是信号 信号是软件中断,信号提供了一种异步处理事件的方法,它允许进程和内核中断其他进程.一个信号就是一条消息,它通知进程系统发生了一个某种类型的事件,在 ...

  5. linux用Lseek函数 拷贝文件,linux系统下lseek函数的详细用法

    前面的文章里面,仔细讲了在linux系统对文件的读写操作以及文件管理,为今天要讲的内容作了铺垫(如果您是刚接触这方面的内容,可以先看我之前写的文章,有错误的地方,还望指出来,在这里先说一声谢谢).好了 ...

  6. python进行linux编程,Python之函数进阶

    本节内容 递归函数 嵌套函数与闭包 匿名函数 高阶函数 内置函数 总结 一.递归函数 函数是可以被调用的,且一个函数内部可以调用其他函数.如果一个函数在内部调用本身,这个函数就是一个递归函数.函数递归 ...

  7. C专家编程—分析signal函数的原型声明{void (*signal(int sig,void (*func)(int)))(int)}(2)

    在ANSI标准中,signal()的声明如下:      void (*signal(int sig,void (*func)(int)))(int) signal是一个函数,它返回一个函数指针,后者 ...

  8. linux下signal()函数超详细介绍

    1. 功能 设置某一信号的对应动作 2. 声明 #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t si ...

  9. 【Linux系列】signal函数详解

    Date: 2023.1.18 文章目录 1.介绍 2.如何安装多个处理函数 3.信号列表 转载自:http://imhuchao.com/2300.html signal作用是为信号注册一个处理器. ...

最新文章

  1. [转] Transact_SQL手册
  2. 『一本通』差分约束系统
  3. redis根据通配符去批量删除指令
  4. win7 磁盘根目录(E盘)添加管理员权限
  5. 用最少数量的箭引爆气球
  6. 每个zone的low memory是怎么计算出来的
  7. 美国大学计算机专业排名2014,2014年美国大学本科计算机专业排名
  8. 中台是个筐,啥都往里装?
  9. Vue通过id跳转到商品详情页
  10. 【华为云实战开发】2.Docker镜像部署怎么玩才酷炫?
  11. 这是一个定时器,定时执行一次,用在定时发送邮件
  12. python:Craps赌博游戏
  13. 查看计算机温度指令,如何查看电脑CPU的温度?查看CPU温度的两种方法
  14. 【学习笔记】【MAC】sdk自带uiautomatorviewer启动报错问题解决
  15. 2021最新某某文书列表参数pageId、ciphertext、__RequestVerificationToken以及接口返回数据result逆向分析(二)
  16. excel分析数据的工具有哪些?
  17. 当AI入职FBI,克格勃直呼内行
  18. 前端实现点击复制功能
  19. 220V转5V非隔离2W电源--超低成本
  20. u盘锁计算机,简单几步将U盘打造成电脑登录“密码锁”,不插入就别打开!

热门文章

  1. svn 服务器在生产环境中的搭建
  2. Less和Sass的使用
  3. java面试第十五天
  4. C++中虚函数与多态实现
  5. 使用StateServer机制来解决session丢失而造成用户验证失败
  6. Oracle数据类型(转)
  7. Python网络爬虫实战:天猫胸罩销售数据分析
  8. KVM日常管理-克隆-快照-磁盘扩容-虚拟磁盘挂载
  9. HTTP学习三:HTTPS
  10. WebBrowser(超文本浏览框)控件默认使用IE9,IE10的方法