Linux信号,signal和sigaction(一)[通俗易懂]

Linux信号,signal和sigaction(一)[通俗易懂]
信号是Unix和Linux系统响应某些条件而产生的一个事件。接收到该信号的进程会相应地采取一些操作。
每个信号都有一个数字编码。
 
         实例:Ctrl-C的工作原理
        1.用户输入ctrl-c<

大家好,又见面了,我是你们的朋友全栈君。

信号是Unix和Linux系统响应某些条件而产生的一个事件。接收到该信号的进程会相应地采取一些操作。

每个信号都有一个数字编码。

 

          实例:Ctrl-C的工作原理

         1.用户输入ctrl-c

          2.驱动程序受到字符

            3.匹配VINTR和ISIG的字符被开启

              4.驱动程序调用信号系统

                 5.信号系统发送SIGINT到进程

                    6.进程受到SIGINT

                       7.进程消亡

 

信号来自于内核,生成信号的请求可以来源于用户,内核,进程

用户:比如Ctrl-C,Ctrl-/.当然这些也可以改变(使用stty改变VINTR控制字符)

内核:非法段存取,浮点溢出等进程运行出错。

进程:一个进程可以通过系统调用kill给另一个进程发送信号;进程间也可以通过信号通信。

 

注:同步信号-–由进程的某个操作产生的信号,比如被零除;

      异步信号-–由进程外部的事件引起的信号,比如用户的击键;

 

信号的名称在signal.h中定义(一般/usr/include/signal.h)。

 

man 7 signal 可以查看signal的相关知识和用法等。

常见的有:

caoli@caoli-laptop:~$ man 7 signal

 First the signals described in the original POSIX.1-1990 standard.

       Signal     Value     Action   Comment
       ──────────────────────────────────────────────────────────────────────
       SIGHUP        1       Term    Hangup detected on controlling terminal
                                     or death of controlling process
       SIGINT        2       Term    Interrupt from keyboard  
       SIGQUIT       3       Core    Quit from keyboard
       SIGILL        4       Core    Illegal Instruction
       SIGABRT       6       Core    Abort signal from abort(3)
       SIGFPE        8       Core    Floating point exception
       SIGKILL       9       Term    Kill signal
       SIGSEGV      11       Core    Invalid memory reference
       SIGPIPE      13       Term    Broken pipe: write to pipe with no
                                     readers
       SIGALRM      14       Term    Timer signal from alarm(2)
       SIGTERM      15       Term    Termination signal
       SIGUSR1   30,10,16    Term    User-defined signal 1
       SIGUSR2   31,12,17    Term    User-defined signal 2
       SIGCHLD   20,17,18    Ign     Child stopped or terminated
   SIGCONT   19,18,25    Cont    Continue if stopped
       SIGSTOP   17,19,23    Stop    Stop process
       SIGTSTP   18,20,24    Stop    Stop typed at tty
       SIGTTIN   21,21,26    Stop    tty input for background process
       SIGTTOU   22,22,27    Stop    tty output for background process

       The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.

       Next  the  signals  not  in  the POSIX.1-1990 standard but described in
       SUSv2 and POSIX.1-2001.

       Signal       Value     Action   Comment
       ────────────────────────────────────────────────────────────────────
       SIGBUS      10,7,10     Core    Bus error (bad memory access)
       SIGPOLL                 Term    Pollable event (Sys V).
                                       Synonym for SIGIO
       SIGPROF     27,27,29    Term    Profiling timer expired
       SIGSYS      12,-,12     Core    Bad argument to routine (SVr4)
       SIGTRAP        5        Core    Trace/breakpoint trap
       SIGURG      16,23,21    Ign     Urgent condition on socket (4.2BSD)
       SIGVTALRM   26,26,28    Term    Virtual alarm clock (4.2BSD)
       SIGXCPU     24,24,30    Core    CPU time limit exceeded (4.2BSD)
 SIGXFSZ     25,25,31    Core    File size limit exceeded (4.2BSD)

       Up to and including Linux 2.2, the default behavior for  SIGSYS,  SIGX‐
       CPU,  SIGXFSZ,  and (on architectures other than SPARC and MIPS) SIGBUS
       was to terminate the process (without a core  dump).   (On  some  other
       Unix systems the default action for SIGXCPU and SIGXFSZ is to terminate
       the  process  without  a  core  dump.)   Linux  2.4  conforms  to   the
       POSIX.1-2001  requirements  for  these signals, terminating the process
       with a core dump.

       Next various other signals.

       Signal       Value     Action   Comment

       ────────────────────────────────────────────────────────────────────
       SIGIOT         6        Core    IOT trap. A synonym for SIGABRT
       SIGEMT       7,-,7      Term
       SIGSTKFLT    -,16,-     Term    Stack fault on coprocessor (unused)
       SIGIO       23,29,22    Term    I/O now possible (4.2BSD)
       SIGCLD       -,-,18     Ign     A synonym for SIGCHLD
       SIGPWR      29,30,19    Term    Power failure (System V)
       SIGINFO      29,-,-             A synonym for SIGPWR
   SIGLOST      -,-,-      Term    File lock lost
       SIGWINCH    28,28,20    Ign     Window resize signal (4.3BSD, Sun)
       SIGUNUSED    -,31,-     Term    Unused signal (will be SIGSYS)

       (Signal 29 is SIGINFO / SIGPWR on an alpha but SIGLOST on a sparc.)

       SIGEMT is not specified in POSIX.1-2001, but  nevertheless  appears  on
       most  other Unix systems, where its default action is typically to ter‐
       minate the process with a core dump.

       SIGPWR (which is not specified in POSIX.1-2001) is typically ignored by
       default on those other Unix systems where it appears.

       SIGIO (which is not specified in POSIX.1-2001) is ignored by default on
       several other Unix systems.
进程处理信号的方式有三种:默认,忽略,调用一个函数。

1.默认:(通常是消亡)

针对SIGINT来说,它的默认处理是消亡,可以用以下调用来恢复默认值

signal(SIGINT,SIG_DFL);

 

2.忽略信号

程序可以通过以下调用来告诉内核他忽略SIGINT信号。

signal(SIGINT,SIG_IGN);

 

3.调用函数

程序告诉内核,当信号来时,应该调用哪个函数。那个函数称为信号处理函数

signal(signum,functionname);

 

关于signal库函数

#include <signal.h>

 

void (*signal(int sig,void (*func)(int))) (int);

遇到错误返回-1

执行成功返回prevcation

 

func为信号处理函数,也可以用SIG_DFL和SIG_IGN来替代。

 

 

signal(SIGINT,SIG_DFL)里面可以用SIG_IGN或者f替代。

 

关于发送信号和sigaction见下节

 

 

我好累阿,回去睡觉。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136740.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Elastic:开发者上手指南

    Elastic:开发者上手指南您们好,我是Elastic的刘晓国。如果大家想开始学习Elastic的话,那么这里将是你理想的学习园地。在我的博客几乎涵盖了你想学习的许多方面。在这里,我来讲述一下作为一个菜鸟该如何阅读我的这些博客文章。我们可以按照如下的步骤来学习:1)Elasticsearch简介:对Elasticsearch做了一个简单的介绍2)Elasticsearch中的一些重要概念:cluster,n…

    2022年6月13日
    23
  • 如何使用串口调试助手(调试串口)

    如何使用串口调试助手(调试串口)转载自:https://jingyan.baidu.com/article/54b6b9c0b3c8c02d583b4707.html如何使用串口调试助手(调试串口)很多时候,调试硬件需要用串口输出一些调试信息,用电脑USB口接收十分方便,串口调试软件很多,用习惯了还是觉得串口调试助手最为方便,这个也是因人而异吧,接下来带大家了解一下串口调试助手如何使用。工具/原料 windows电脑一台 USB接口线一根(用于连接硬件和电脑USB接口) 方法/步骤 1 下载.

    2022年6月9日
    69
  • mysql读写分离延迟问题_MySQL读写分离后的延迟解决方案

    mysql读写分离延迟问题_MySQL读写分离后的延迟解决方案数据库——MySQL读写分离后的延迟解决方案背景:根据上图可以看到QPS:10.73k,实际上真实的并发大量数据到达的时候,我这里最高的QPS是将近15k.而目前单个数据库分片(实例)4CPU8G内存的配置下,最高的性能是7k的QPS。基于上篇我进行了分库分表是对于性能有很大的提高,分库分表实践和中间件的引申我这里讲解的例子是目前4主8从库(12个实例),以下每个实例都会称为分片。单个分片配置my…

    2022年5月29日
    61
  • apache24+php8配置

    apache24+php8配置电脑下载安装地址:Xampp安装完成后找到里面的apache》config》httpd.config:首先注释掉默认的路径DocumentRoot”D:/software/Xampp/htdocs”;然后再找到IfModuledir_module在后面追加:<IfModuledir_module>DirectoryIndexindex.phpindex.htmlindex.htmdefault.phpdefault.htmldefault.htmhome.

    2022年7月12日
    14
  • 用IDEA一年了,终于敢说自己会用了(IDEA配置和使用)[通俗易懂]

    作为Java老兵,我也是用了很多年的eclipse,为了与时俱进,于是切换到了IDEA。刚开始的时候感觉很不适应,感觉这玩意儿不如eclipse好用,影响工作效率,于是又换回eclipse。但是很多

    2022年2月16日
    44
  • activiti与flowable的区别

    activiti与flowable的区别免费视频限时抢购:《Activiti6视频教程全家桶》《Flowable系列优惠套餐》《Flowable全家桶》《Camunda教程》《Drool7从入门到精通》在详细说明activiti与flowable的细节区别之前,我们需要说明一下这两个框架的发展史。我在写Activiti权威指南的时候,大概是2016年7月份左右。给清华大学出版社交稿的时候大概在2017年3月份…

    2022年5月11日
    80

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号