• 【APUE】信号


    一、信号概念

    信号都被定义为正整数,不存在编号为0的信号。

    信号是异步事件的经典实例。产生信号的事件对进程而言是随机出现的,进程不能简单地测试一个变量来判别是否出现了一个信号,而是必须告诉内核在此信号出现时,请执行下列操作。

    信号的处理有三种方式:

    1.忽略此信号。大多数信号都可使用这种方式进行处理,SIGKILL和SIGSTOP不能被忽略,它们向超级用户提供了使进程终止或停止的可靠方法。

    2.捕捉信号,通知内核在某种信号发生时调用一个用户函数。注意:不能捕捉SIGKILL和SIGSTOP信号

    3.执行系统默认动作,注意,针对大多数信号的系统默认动作是终止进程。

     二、signal函数

    #include <signal.h>

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

    返回值:若成功则返回信号以前的处理配置,若出错则返回SIG_ERR

    signo参数是信号名,func的值是常量SIG_IGN、常量SIG_DFL或当接到此信号后要调用的函数的地址。SIG_IGN表示忽略此信号,SIG_DFL表示接到此信号后的动作是系统默认动作。当指定函数地址时,则在信号发生时,调用该函数。func的参数可以从shell中接收,该函数称为信号处理程序。

    1.程序调用

    当执行一个程序时,所有信号的状态都是系统默认或忽略,通常所有信号都被设置为它们的默认动作,除非调用exec的进程忽略该信号。确切的讲,exec函数将原先设置为要捕捉的信号都更改为它们的默认动作,其他信号的状态不变。

    2.进程创建

    当一个进程调用fork时,其子进程继承父进程的信号处理方式。

     三、可重入函数

    可重入函数是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,去执行另外一段代码,返回时不会出现错误。

    可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据受否会出错。

    不可重入的原因:a)使用静态数据结构;b)调用malloc或free;c)标准I/O函数

  • 相关阅读:
    k8s
    vue-element-admin实现模板打印
    MAC系统命令
    思维导图工具
    前端如何渲染几万条数据不卡住页面?
    Echar使用案例
    .Net 相关报错解决方案
    Windows 操作技巧
    Docker&K8s
    微信网页授权原理分析
  • 原文地址:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/3836528.html
Copyright © 2020-2023  润新知