sigaction 使用

sigaction 使用函数sigaction原型:intsigaction(intsigno,conststructsigaction*restrictact,structsigaction*restrictoact);@signo信号编号@act要注册的信号动作@oact原信号动作参数structsigactionstructsigaction{

大家好,又见面了,我是你们的朋友全栈君。

函数sigaction

原型:int sigaction(int signo,const struct sigaction *restrict act, struct sigaction *restrict oact);
    @signo 信号编号
    @act   要注册的信号动作
    @oact  原信号动作

参数 struct sigaction

struct sigaction{
void (*sa_handler)(int);
sigset_t sa_mask;
int sa_flag;
void (sa_sigaction)(int,siginfo_t ,void *);
};

sa_haddler or sa_sigaction

sa_handler & sa_sigaction 信号处理函数的指针,二者用其一:如果sa_flags中存在SA_SIGINFO标志,那么sa_sigaction将作为signum信号的处理函数。否则用sa_handler。

sa_mask

sa_mask 指定一个系统在处理该信号时要屏蔽(阻塞)的信号集合,即在调用该信号捕捉函数之前,这一信号集要加进进程的信号屏蔽字中。仅当从信号捕捉函数返回时再将进程的信号屏蔽字复位为原先值。另外,除了SA_NODEFER标志被指定外,触发信号处理函数执行的那个信号也会被阻塞。

sa_flag

sa_flag 指定一系列用于修改信号处理过程行为的标志,由下面的0个或多个标志通过or运算组合而成:
SA_SIGINFO   指定信号处理函数需要三个参数,所以应使用sa_sigaction替代sa_handler。
SA_NODEFER   在信号处理函数处置信号的时段中,核心程序不会把这个间隙中产生的信号阻塞。
SA_INTERRUPT  由此信号中断的系统调用不会自动重启
SA_RESTART   核心会自动重启信号中断的系统调用,否则返回EINTR错误值。(重启被中断的系统调用)
SA_RESETHAND 信号处理函数接收到信号后,会先将对信号处理的方式设为预设方式,而且当函数处理该信号时,后来发生的信号将不会被阻塞。
SA_ONSTACK   如果利用sigaltstack()建立信号专用堆栈,则此标志会把所有信号送往该堆栈。
SA_NOCLDSTOP 假如signum的值是SIGCHLD,则在子进程停止或恢复执行时不会传信号给调用本系统调用的进程。
SA_NOCLDWAIT 当调用此系统调用的进程之子进程终止时,系统不会建立zombie进程。

使用实例

redis 信号处理
redis 信号处理

参考

ref 1

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141131.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • endnote转化成纯文本后_EndNote X7如何去掉域代码生成纯文本文件

    endnote转化成纯文本后_EndNote X7如何去掉域代码生成纯文本文件满意答案czpunk2016.08.17采纳率:58%等级:9已帮助:2963人现在很多杂志都要求作者提供电子文稿。格式化后的文稿含有大量域代码,有可能与杂志社的软件不兼容,因此提交前需要去掉文稿里的域代码。方法是从Word的工具栏里进入“EndNote7.0”子菜单选择点击“RemoveFieldCodes”,出现一个提示框告诉你“该操作将创建一个新的去掉了所有域代码的Word文档,…

    2022年5月28日
    55
  • ext表示什么_rent和lease

    ext表示什么_rent和leaseExtjs的组件有两个看起来类似的配置项,applyTo和renderTo,这两个配置项都是用来指定将该extjs组件加载到什么位置。那他们到底有什么区别呢,网上搜了下,有两篇博文也是关于这个的。ExtJS中的renderTo和applyTo的差别[url]http://hi.baidu.com/agzfsshohpcdegr/item/50370f1912dc05e3…

    2022年7月28日
    6
  • js全局变量在其他方法中赋值后无法影响到该方法外的全局变量的值(奇葩问题)

    js全局变量在其他方法中赋值后无法影响到该方法外的全局变量的值(奇葩问题)做个笔记,以防忘记遇到一个奇葩问题(书写规范不会遇到此问题)问题描述:$(document).ready(function(){varstrCookie=document.cookie;username=”1″;if(strCookie){cookieVariables=strCookie.split(“;”);

    2022年5月5日
    50
  • linux查看当前目录下的所有目录

    我们知道可以使用ll命令列出当前目录下的所有文件夹和文件,ls-a还可以把隐藏文件显示出来,如果我们只想列出当前目录,可以使用如下命令ls-d*/ll-d*/

    2022年4月6日
    74
  • TaskScheduler详解及源码介绍

    TaskScheduler详解及源码介绍1createTaskScheduler创建TaskScheduler的源代码为SparkContext.createTaskScheduler,如下所示。该方法会根据master的配置匹配部署模式,每种部署模式中都会创建两个类(TaskSchedulerImpl、SchedulerBackend)的实例,只是TaskSchedulerImpl都相同,SchedulerBackend不同。/…

    2022年10月11日
    4
  • 区块链项目都有哪些(区块链到底是啥)

    区块链项目都有哪些(区块链到底是啥)自2017年上半年以来,区块链应用项目的市场价值位列前20名。区块链项目主要分为四类:第一类:数字资产,第二类:智能合同,第三类:全球支付,第四类:基于平台的应用服务。一、数字资产第一类是数字资产,分为普通数字资产和匿名应用场景的匿名数字资产。通用数字资产包括比特币和莱特…

    2022年4月18日
    70

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号