首页 > 系统相关 >Unix/Linux系统编程(信号和信号处理)

Unix/Linux系统编程(信号和信号处理)

时间:2022-10-26 17:02:11浏览次数:62  
标签:中断 信号处理 用户 Unix 信号 Linux 进程

 

一.关于信号和中断

  1.信号机制别名软中断,在<signal.h>系统头文件中定义了一系列的信号编号,都对应着一个正整数量:

 

   进程在用户空间运行时, 都要用信号机制来检查是否有信号到达, 而一般的进程默认对应信号的处理都是killed, 除非使用signal(信号编号, 处理方式)函数来处理(所以别名软中断)。

  2.“中断”是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。“中断”一词可应用于任何“进程”,并不仅限于计算机中的CPU,例如:人员中段、进程中断、硬件中断、进程的陷阱错误导致自行中断等等

  3.信号和中断的相似点:

    (1)都采用了异步通信的方式.

​       同步就是排队, 信息一个接一个的处理, 异步就是插队

    (2)都是暂停当前的, 去执行对应的handle程序

    (3)都是处理完返回原来位置

    (4)对于信号和中断, 都是可以屏蔽的

  4.信号和中断的区别

    (1)中断有优先级, 信号没有

    (2)信号处理程序在用户态下运行的, 中断程序在核心态下运行的

    (3)中断响应是及时的, 当信号响应一般有延迟

二.Uinx/Linux信号示例与信号处理

  1.信号示例

    (1)按“Ctrl+C”组合键通常会导致当前运行的进程终止。

    (2)用户可使用nohup a.out & 命令在后台运行一个程序,即使在用户退出之后,进程仍将继续运行。nohup命令会使sh像往常一样复刻子进程来执行程序,但是子进程会忽略SIGHUP(1)信号。当用户退出时,sh会向与终端有关的所有进程发送一个SIGHUP信号。后台进程在接收到这一信号后,会忽略它继续运行。为防止后台进程使用终端进行I/O,后台进程通常会断开与终端的连接,使其完全不受任何面向终端信号的影响。

    (3)也许几天之后,用户再次登录时会发现后台进程仍在运行,可以使用sh命令:

      kill pid (or kill -s 9 pid)杀死该进程。

 

  2.信号处理

    (1)信号类型:Unix/Linux支持31种不同信号,每种信号在signal.h文件中都有定义

    (2)信号来源

      来自硬件中断的信号

        1)中断键(Ctrl+C):产生一个SIGINT(2)信号。

        2)间隔定时器:当它的时间到期时,会产生一个SIGALRM(14)、SIGVTALRM(26)或SIGPROF(27)信号。

        3)其他硬件错误,如总线错误、IO陷阱等。

      来自异常的信号:当用户模式下的进程遇到异常时,会陷入内核模式,生成一个信号,并发送给自己。

      来自其他进程的信号:进程可使用kill(pid,sig)系统调用向pid标识的目标进程发送信号。

三.信号处理步骤

  1.当某进程处于内核模式时,会检查信号并处理未完成的信号

  2.重置用户安装的信号捕捉函数:用户安装的陷阱相关信号捕捉函数用于处理用户代码中的陷阱错误。

  3.信号和唤醒:在Unix/Linux内核中有两种SLEEP进程;深度休眠进程和浅度休眠进程。前一种进程不可中断,而后一种进程可由信号中断。

 

标签:中断,信号处理,用户,Unix,信号,Linux,进程
From: https://www.cnblogs.com/yao-yuer/p/16827640.html

相关文章

  • Linux安装nginx
    1、安装所需环境//安装gccyuminstallgcc-c++//安装PCREpcre-develyuminstall-ypcrepcre-devel//安装zlibyuminstall-yzlibzlib-devel//安装OpenS......
  • linux运维管理常用指令
    发布时间  2022-10-26:15:37接上节<5分钟快速搭建nodejsweb应用>,我们部署完web应用后,就会遇到一些维护问题,比如外网无法访问,比如我们要重启,结束进程等等,本节重点列举几......
  • linux7系统搭建Prometheus+Grafana+Alertmanager监控平台
    一、环境准备1.系统   centos7.92.安装包下载​​https://prometheus.io/download/​​grafana官网下载:https://grafana.com/grafana/downloadalertmanager-0.23.0.......
  • Linux运维比较常用的一些脚本
    注意:根据不同系统的版本可能有些脚本的命令不是这样子使用,请悉知!!!根据PID过滤进程所有信息#!/bin/bash#Function:根据用户输入的PID,过滤出该PID所有的信息read-p"请......
  • 在Linux命令行中查找空目录
    在Linux系统中,出现空的目录这是很正常的事情,而且,也是有办法一次性把它们都找出来的。但是,仅仅列出空目录并不是我们的目的,我们今天了解一下如何删除这些空的目录。1、在Li......
  • 查看Linux 位数和发行版名称、版本
    位数:getconfLONG_BIT或getconfWORD_BIT或file/bin/ls发行版:uname-acat/etc/issuelsb_release-d发行版描述lsb_release-a全部信息CentOS(RedHad):cat/etc/re......
  • 在linux系统中安装Nodejs 的简单步骤说明
    一、首先我们要下载Nodejs安装包 1、可以从官网上https://nodejs.org/zh-cn/download/ ,下载合适自己的安装包。大家可以根据自己的服务器下载不同的安装包,通过uname......
  • 无人值守按照Linux系统
    无人值守安装Linux系统......
  • Linux学习笔记之mac系统Vmware Fusion虚拟机黑屏问题
    详细参考此文,https://zhuanlan.zhihu.com/p/108613520目前在MontereyMacOS12.6系统测试适用,仅做记录在此/**一般文章是需要到恢复模式,在bigSur和Monterey系统,不需要......
  • Linux 使用ipvsadm管理LVS
    lvs是内核里面的功能,在内核中叫做ipvs用户空间使用ipvsadm这个工具包提供的工具来管理内核中的ipvs功能ipvsadm命令ipvsadm核心功能:集群服务管理:增、删、改......