前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sigaction 使用

sigaction 使用

作者头像
全栈程序员站长
发布2022-09-01 16:50:11
4040
发布2022-09-01 16:50:11
举报

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

函数sigaction

代码语言:javascript
复制
原型: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

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

sa_mask

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

sa_flag

代码语言:javascript
复制
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.cn/141131.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 函数sigaction
  • 参数 struct sigaction
    • sa_haddler or sa_sigaction
      • sa_mask
      • sa_flag
  • 使用实例
  • 参考
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档