ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Ch6 信号和信号处理

2021-11-14 19:02:38  阅读:115  来源: 互联网

标签:Ch6 中断 信号处理 Unix 信号 Linux 进程 define


Ch6 信号和信号处理

知识概要:

  • 信号和信号处理;
  • 信号和中断的统一处理
  • 将信号视为进程中断,将进程从正常执行转移到信号处理
  • 信号的来源,包 括来自硬件、异常和其他进程的信号
  • 信号在Unix/Linux中的常见用法
  • Unix/Linux中的信号处理
    • 信号类型
    • 信号向量位
    • 信号掩码位
    • 进程 PROC结构体中的信号处理程序
    • 信号处理步骤

6.1 信号和中断

  1. 中断:从1/0设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移 到中断处理。
  2. 信号:发送给进程的请求,将进程从正常 执行转移到中断处理。

6.2 Unix/Linux信号示例

  1. Ctrl+C组合键会生成一个键盘硬件中断。键盘中断处理程序将Ctrl+C组合键转换为SIGINT(2)信 号,发送给终端上的所有进程,并唤醒等待键盘输入的进程。
  2. 用户可使用nohup a.out命令在后台运行一个程序。即使在用户退出后,进程仍将继续运行。nohup命令会使sh像往常一样复刻子进程来执行程序,但是子进程会忽略 S1GHUP(1)信号。
  3. 用户可以使用sh命令kill pid or kill -s 9 pid杀死该进程。方法如下。
    • 读者可能会问,为什么是9号信号呢?在最初的Unix中,只有9个 信号。9号信号被保留为终止进程的终极手段。虽然后来的Unix/ Linux系统将信号编号扩 展到了 31,但是信号编号9的含义仍然保留了下来。

6.3 Unix/Linux中的信号处理

Unix/Linux支持31种不同的信号,每种信号在signal.h文件中都有定义。

每种信号都有一个符号名,如SIGHUP(1)SIGEMT(2)SIGKILL(9)S1GSEGV(11)等。


#define	SIGHUP	1
#define	SIGINT	2
#define	SIGQUIT	3
#define	SIGILL	4
#define	SIGTRAP	5
#define	SIGABRT	6
#define	SIGIOT	6
#define	SIGBUS	7
#define	SIGFPE	8
#define	SIGKILL	9
#define	SIGUSR1	10
#define	SIGSEGV	11
#define	SIGUSR2	12
#define	SIGPIPE	13
#define	SIGALRM	14
#define	SIGTERM	15
……
  • 来自硬件中断的信号:在进程执行过程中,一些硬件中断被转换为信号发送给进程

    • 中断键Ctrl+C,它产生一个SIGINT(2)信号。
    • 间隔定时器,当它的时间到期时,会生成一个SIGALRM(14)SIGVTALRM(26)SIGPROF(27)信号。
  • 其他硬件错误,如总线错误、IO陷阱等。

    • 来自异常的信号:当用户模式下的进程遇到异常时,会陷入内核模式,生成一个信号,并发送给自己。常见的陷阱信号有SIGFPE(8),表示浮点异常(除以0),最常 见也是最可怕的是SIGSEGV(11),表示段错误,等等。
    • 来自其他进程的信号:进程可使用kill(pid, sig)系统调用向pid标识的目标进程发送信号。
  • 实践:

    在Linux中运行简单的C程序

    main()( while(1>; }
    

    使进程无限循环。从另一个终端,使用ps-u查找循环进程pid。然后 输入sh命令
    kill -s 11 pid

  • 循环进程会因为段错误而死亡。

  • 进程PROC结构体中的信号

标签:Ch6,中断,信号处理,Unix,信号,Linux,进程,define
来源: https://www.cnblogs.com/lxy2019/p/15552805.html

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

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

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

ICode9版权所有