zoukankan      html  css  js  c++  java
  • 【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函数

  • 相关阅读:
    DNNClassifier 深度神经网络 分类器
    浏览器对MP4视频 帧宽度 高度的兼容性
    UnicodeEncodeError:'latin-1' codec can't encode character
    文件夹下 文件计数
    the largest value you actually can transmit between the client and server is determined by the amount of available memory and the size of the communications buffers.
    the “identity” of an object
    广告特征 用户特征
    如果一个维度全覆盖,则有效维度应该对该维度全覆盖
    a high-level neural networks AP
    使用 LDA 挖掘的用户喜好主题
  • 原文地址:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/3836528.html
Copyright © 2011-2022 走看看