zoukankan      html  css  js  c++  java
  • LINUX的signal

    linux的信号来源
    1.由一个进程发给另一个进程(或本身)
    2.内核发给进程
    信号的特征
    异步的,分为可靠信号和不可靠信号。
    进程收到信号时怎么处理
    1.执行信号处理程序
    2.如果收到信号时处在一个阻塞函数中,中断当前系统调用并执行信号处理程序
    3.如果想要信号处理程序后恢复被中断的系统调用,需要设置SA_RESTART标志,是否奏效依赖于不同的系统。
    信号的三种处理方式
    1.自定义处理动作,并通过signal或者sigaction将自定义信号处理函数和信号关联起来。
    2.设置信号的处理动作为SIG_IGN来忽略它
    3.设置信号的处理动作为SIG_DFL,采用默认处理动作,默认处理动作一般是退出进程,也有的是产生core文件,还有的信号是忽略掉。
    SIGKILL和SIGSTOP不能被捕捉,也不能被自定义处理和忽略处理。
    信号处理程序会不会被信号打断
    1.posix允许我们定义一组信号,当信号处理程序被调用时阻塞它们。任何阻塞的信号不能被递交给进程,posix保证信号处理程序运行时被捕获的信号是阻塞的。
    2.linux保证信号处理程序不会被另一个信号打断
    不可靠信号和可靠信号的差别
    是否排队,不可靠信号会把相同信号合并为一个,而可靠信号会把收到的信号排队。当信号产生的速度大于信号处理的速度,不可靠信号会丢失信号。
    信号的应用
    信号处理函数不要调用不可重入函数,比如标准库的printf、malloc等,尽量简单点,不做实际工作,比如设置进程退出flag,合适退出交给线程和进程判断flag并在合适时候退出。

    慢系统调用需要处理的信号中断错误
    当一个慢系统调用被信号打断时,会返回EINTR作为返回值,这不是错误,需要再次调用该系统调用。
    大多数网络的阻塞调用:accept、read都属于慢系统调用。
  • 相关阅读:
    BZOJ 3992: [SDOI2015]序列统计
    BZOJ 4836: [Lydsy1704月赛]二元运算
    2.Add Two Numbers
    [RN] React Native 调试技巧
    [商业世界] 商业三流:信息流、资金流、物流
    [杂谈] 记 程序员 对抗失眠烦恼的 大法
    [未来成长]让写作成为一种生活习惯
    [未来成长] 分享:《麦肯锡教我的写作武器》如何写出一篇具有逻辑表现力的文案
    [未来成长] 分享:在腾讯的八年,我的职业思考
    [PHP]:AES对称加密 -- 支持PHP7
  • 原文地址:https://www.cnblogs.com/learn-my-life/p/5652852.html
Copyright © 2011-2022 走看看