ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux系统调用进程2信号

2020-02-06 19:04:28  阅读:278  来源: 互联网

标签:Term 调用 signal 默认 终止 信号 linux 进程


1. 信号理论基础

**信号共性:
      简单、不能携带大量信息、满足条件才发送
**信号的特质:
      信号是软件层面上的"中断"。一旦型号产生,无论程序执行到什么位置,必须立即停止运行,处理信号,处理结束,在继续执行后续指令。
      所有信号的产生以及处理全部都是有【内存】完成的
      
*** 信号产生
 1. 按键产生,ctrl+z、ctrl+c
 2. 系统调用产生, 如果kill
 3. 软件条件产生, sleep
 4. 硬件异常产生, 段错误、
 段错误: 1. 访问了不是自己内存, 比如malloc自己申请了区域,访问malloc区域外了
          2. 对只读区进行修改 char* ch="abc"  ch[0]='a'
 5.命令产生,比如kill命令  
 
    未决: 产生与递达之间状态
    递达: 产生送到内核,直接被内核处理掉
    信号处理方式: 默认、忽略、捕捉(自定义)
    
    linux内核进程控制块pcb是一个结构体,task_struct,除了包含进程id,状态,工作目录,用户id,组id,文件描述符表,
    还包含信号相关信息,阻塞信号和未决信号
    
    例子:
    比如ctrl+c发送2号信号,那么未决信号集把第二位设置为1,那么内核发现第二未变成1了,处理2号信号,处理[默认、忽略、捕捉(自定义)]完毕第二位变成0

未决信号集把第二位设置为1


    完毕第二位变成0


   如果由于某种原因,把2号信号设置屏蔽,那么信号屏蔽字中2号变成1,那么信号不能递到内核,那么信号不能处理
   等到屏蔽字中2号变成0,那么信号才可以被处理,未决信号集才把第二位设置为0

   信号阻塞

2. 常用信号集

    信号4要素:
    信号编号、名称、 对应事件、默认处理动作

    man 7 signal
      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 terminal
       SIGTTIN   21,21,26    Stop    Terminal input for background process
       SIGTTOU   22,22,27    Stop    Terminal output for background process

       SIGUSR1   30,10,16    Term    User-defined signal 1 不同操作系统对应value不一样,名称一样

1    SIGHUP:  当用户退出shell时,由该shell启动所有进程将接收这个信号,默认动作为停止进程
2    SIGINT:  相当于ctrl+c(终止/中断), 默认是终止进程
3    SIGQUIT: 相当于ctrl+\(退出), 默认是终止进程
6    SIGBUS:  总线错误,非法访问内存地址,默认终止进程产生core文件[用于gdb调试能够找到错误所在行,那么因为程序在终止的时候把错误信息写入了core文件]
8    SIGFPE:  发生致命运算错误时发生,  包括溢出,除数为0,默认终止进程产生core文件
10    SIGUSR1: 用户定义信号, 程序员可以在程序中定义并且使用该信号, 默认动作是终止进程
12    SIGUSR2: 用户定义信号, 程序员可以在程序中定义并且使用该信号, 默认动作是终止进程
*****    
9  SIGKILL: 无条件终止进程,   不能被忽略、阻塞,上面的ctrl+c信号,如果把该信号捕捉掉,那么进程无法杀死,如果是病毒,完了
19 SIGSTOP:无条件停止

11  SIGSEGV:  进程在进程无效内存访问,默认终止进程产生core文件
13    SIGPIPE:  向一个没有读端的管道写数据,默认终止进程
14  SIGALRM:   定时器超时,超时时间 有系统调用alarm 设置,默认动作终止进程
17  SIGCHLD:  子进程终止时候、子进程接收到SIGSTOP信号停止时、子进程处停止态,接收到SIGCONT后唤醒时,告诉父进程,父进程可以去收尸了,默认忽略
20  SIGTSTP:   ctrl+z. (暂停/停止)

小置同学 发布了51 篇原创文章 · 获赞 52 · 访问量 10万+ 私信 关注

标签:Term,调用,signal,默认,终止,信号,linux,进程
来源: https://blog.csdn.net/dreams_deng/article/details/104200379

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有