signal设置对某一信号对应动作,signal机制可以被理解成进程的软中断

man 一下

SYNOPSIS
       #include <signal.h>

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

DESCRIPTION
       The behavior of signal() varies across UNIX versions, and has also var‐
       ied historically across different versions of Linux.   Avoid  its  use:
       use sigaction(2) instead.  See Portability below.

signal() sets the disposition of the signal signum to handler, which is
       either SIG_IGN, SIG_DFL, or the address of a  programmer-defined  func‐
       tion (a "signal handler").

If  the signal signum is delivered to the process, then one of the fol‐           第一个参数signum:指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTOP外的任何一种信号。
       lowing happens:

*  If the disposition is set to SIG_IGN, then the signal is ignored.

*  If the disposition is set to SIG_DFL, then the default action  asso‐
          ciated with the signal (see signal(7)) occurs.

*  If  the disposition is set to a function, then first either the dis‐
          position is reset to SIG_DFL, or the signal is blocked  (see  Porta‐
          bility  below), and then handler is called with argument signum.  If
          invocation of the handler caused the signal to be blocked, then  the
          signal is unblocked upon return from the handler.

The signals SIGKILL and SIGSTOP cannot be caught or ignored.

RETURN VALUE
       signal()  returns  the previous value of the signal handler, or SIG_ERR
       on error.  In the event of an error,  errno  is  set  to  indicate  the
       cause.

ERRORS
       EINVAL signum is invalid.

实际操作:

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
void my_sig_func(int signo)
{printf("get a signal : %d\n", signo);
}int main(int argc, char **argv)
{int i = 0;signal(SIGIO, my_sig_func);while (1) {printf("Hello, world %d!\n", i++);sleep(2);}return 0;
}

 

一些常用的Signal :

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专用,进程超过资源限制的时候发

具体的调用机制是怎么样子的呢?写在后面一篇韦东山学习里面。

【Linux函数】——Signal 函数相关推荐

  1. linux中signal函数返回值,signal函数、sigaction函数及信号集操作函数

    信号是与一定的进程相联系的.也就是说一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如一个进程可以忽略某些信号而只处理其他一些信号另外一个进程还可以选择如何处理信号.总之这些总与特定的进程相联 ...

  2. linux中signal函数的简单用法

    信号是软件中断,它提供了一种处理异步事件的方法,每个信号有个以SIG打头的名字,讲signal函数之前我们先了解下当前系统所支持的信号名称,在linux中敲下kill -l就能查看. [lingyun ...

  3. Linux中signal函数

    signal函数介绍 #include <signal.h> signal(参数1,参数2): 参数1:我们要进行处理的信号.系统的信号我们可以再终端键入kill -l查看(共64个).其 ...

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

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

  5. Linux编程signal函数使用

    题目: 编写一段程序,使用系统调用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill( )向 ...

  6. linux signal函数用法,linux信号机制之sigaction构造体浅析,signal 函数,信号捕捉.

    来自:http://hi.baidu.com/phenix_yw/blog/item/6eb4ca391d1479f23a87ce19.html 信号安装函数sigaction(int signum, ...

  7. 理解signal函数

    关键字:Unix , Linux, signal, 函数指针,指针函数 在Unix/Linux中signal函数是比较复杂的一个,其定义原型如下: void (*signal(int signo,vo ...

  8. Linux信号之signal函数

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

  9. Signal ()函数详细介绍 Linux函数

    signal()函数理解 在<signal.h> 这个头文件中. signal(参数1,参数2): 参数1:我们要进行处理的信号.系统的信号我们可以再终端键入 kill -l查看(共64个 ...

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

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

最新文章

  1. 2019 ACM - ICPC 全国邀请赛(南昌) 题解(9 / 12)
  2. UESTC 电子科大专题训练 数据结构 J
  3. 开发中使用UEditor编辑器的注意事项
  4. php 支付宝付款接口测试
  5. 为什么说读博是最好的选择?
  6. 并发-分布式锁质量保障总结
  7. 网站站长综合seo在线查询工具源码
  8. 【Salient Object Detection】显著性物体检测资料汇总
  9. keystone 手动建立租户,用户,角色,服务,端口
  10. 输油管的布置数学建模matlab,输油管的布置-数学建模.docx
  11. mysql query cache_MySQL Query Cache开启与否的必要性分析
  12. 知行EDI系统-入门篇
  13. 解决鼠标右键中没有新建选项
  14. hget和get redis_redis hget阻塞 使用redis时遇到的问题 - Redis - 服务器之家
  15. Spring - Spring事务控制详解与案例总结
  16. 图像超分之——寻找两张图差异的区域
  17. Linux下mysql 登录退出及常用命令
  18. 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m
  19. 【Linux】(用户不在sudoers文件中……) 添加用户到sudoers
  20. Scanner类nextLine()和next()的区别和使用方法

热门文章

  1. 计算机窗口闪屏,热点:电脑显示器闪屏(电脑屏幕闪烁的解决方法)
  2. 初三学生多会筹备计算机中考考试,2020考生,进入初三你将遇到这些大事,提前做好中考准备...
  3. <DataWhale>- 语义分割 - RLE编码
  4. Day 02|11-1:预料部分和java入门
  5. Docker-Compose部署kafka教程
  6. 麒麟子惯用框架分享(建议收藏)
  7. swing java awt_Java awt和Swing的区别
  8. 日常电脑操作应该注意的十几个小动作以及维护 (引用)
  9. boot.artboot.oat
  10. 1000以内猜数游戏