linux操作系统信号捕捉函数之sigaction用法小结

(1)sigaction函数:注册一个信号捕捉函数(不参与捕捉信号,信号由内核捕捉),并修改原来的信号处理动作

(2)函数原型及头文件

             头文件:#include<signal.h>

            函数原型:int sigaction(int signum,const struct sigaction*act,struct sigaction*oldact);

(3)返回值:成功返回值为0.失败返回值为-1

(4)结构体参数:struct sigaction

           struct sigaction{

                               void  (*sa_handler)(int);//信号捕捉函数的函数指针

                               void  (*sa_sigaction)(int ,siginfo_t*,void*);//当sa_flag==SA_SIGINFO,使用此函数

                               sigset_t sa_mask;//信号捕捉函数执行时指定的临时信号集

                                int sa_flags;//通常设置为0,表示默认属性,即信号捕捉函数期间自动屏蔽本信号

                               void    (*sa_restorer)(void);//舍弃不用

                        };

(5)sigaction函数实现:

(6)sigaction使用注意点

         1)在信号捕捉函数执行期间,如果遇到sa_mask屏蔽信号字中的信号,则会发生阻塞,等到捕捉函数执行完毕后再处理这个信号。

         2)在信号捕捉函数执行期间,阻塞的常规信号不支持排队,产生多次只记录一次。如果再次发捕获信号,则会再次进入信号捕捉函数。

        3)如果在信号捕捉函数执行期间,遇到sa_mask之外的信号,则会优先执行这个信号,然后再执行信号捕捉函数(如果前面的信号没有让程序结束或暂停)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis源码剖析(十五)——客户端思维导图整理

redis源码剖析&#xff08;十五&#xff09;——客户端执行逻辑结构整理 加载略慢

linux操作系统信号捕捉函数之回调函数小结

&#xff08;1&#xff09;signal 信号捕捉函数&#xff1a;注册一个信号捕捉函数&#xff08;不参与捕捉&#xff0c;那是内核的事情&#xff09; 函数实现&#xff1a; typedef void(*sighandler_t)(int); //声明了一个函数指针&#xff08;代表着一类函数&#xff1a;参…

Redis运维和开发学习笔记-全书思维导图

Redis运维和开发学习笔记-全书思维导图 图片过大&#xff0c;无法上传。 链接:https://pan.baidu.com/s/13pnEMBEdLgjZNOOEAuDvEQ 密码:qhch

linux操作系统之竞态条件(时序竞态)

&#xff08;1&#xff09;时序竞态&#xff1a;前后两次运行同一个程序&#xff0c;出现的结果不同。 &#xff08;2&#xff09;pause函数&#xff1a;使用该函数会造成进程主动挂起&#xff0c;并等待信号唤醒&#xff0c;调用该系统调用的进程会处于阻塞状态&#xff08;主…

linux操作系统之全局异步IO及可重入/不可重入函数

&#xff08;1&#xff09;全局变量异步I/O实现父子进程交替数数 1&#xff09;信号捕捉函数 2&#xff09;main函数实现信号交替 3&#xff09;程序实现 1》创建子进程&#xff0c;父进程等待1s&#xff0c;等待子进程完成捕捉函数注册&#xff08;捕捉信号SIGUSR1&#xff09…

RDB和AOF速度测试

同一台机器测试 Redis3.2 Redis5.0.7 Linux python 3.10.0-693.11.1.el7.x86_64 #1 SMP Mon Dec 4 23:52:40 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux rdb测试步骤 1. 修改redis.conf配置文件 开启rdb(测试aof时&#xff0c;注释掉rdb&#xff0c;并重启redis) # save &quo…

LInux操作系统之SIGCHLD信号

&#xff08;1&#xff09;SIGCHLD产生条件 1&#xff09;子进程终止的时候 2&#xff09;子进程接收到SIGSTOP信号停止时 3&#xff09;子进程处于停止状态&#xff0c;接受到SIGCONT后唤醒 &#xff08;2&#xff09;借助SIGCHLD使用waitpid信号实现父进程对子进程的回收 &a…

rdb和aof到底哪个快

rdb和aof到底哪个快&#xff1f; 大多数情况rdb比aof快&#xff01;取决因素是fsync策略 具体选择aof还是rdb应根据业务场景选择。纠结于两者哪个更快意义不大 测试数据 数据量rdb时间rdb文件大小5000076s1.1M100000197s2.1M150000235s3.1M200000305s4.3M 数据量aof时间ao…

linux操作系统之终端

&#xff08;1&#xff09;终端分类&#xff1a; AltCtrlF1~F6 字符终端 pts :伪终端 AltCtrlF7 图形终端 SSH&#xff0c;Telnet 网路终端 &#xff08;2&#xff09;终端的启动流程 每一个进程都可以通过一个特殊的设备文件/dev/tty访问它的控制终端&#x…

golang实现聊天室(一)

一个简单的tcp通讯 客户端发一下&#xff0c;服务端收一下打印 客户端 func main() {var conn, err net.DialTimeout("tcp", "127.0.0.1:8888", 30*time.Second)if err ! nil {return}conn.Write([]byte("string not "))conn.Close() }服务端 …

linux操作系统之进程组及会话

&#xff08;1&#xff09;进程组&#xff08;作业&#xff09;&#xff1a;代表一个或多个进程的集合。 1)父进程创建子进程时&#xff0c;默认子进程与父进程属于同一进程组&#xff0c;进程组id第一个进程id(组长id,父进程id)。 2)使用kill -SIGKILL -进程组id(负数&#xf…

golang实现聊天室(二)

golang实现聊天室&#xff08;二&#xff09; 上一篇完成了服务端启动监听连接&#xff0c;客户端建立连接&#xff0c;发一个消息&#xff0c;断开连接。服务端收一下&#xff0c;然后服务端打印。 客户端可以一直发送消息&#xff0c;服务端不停接收并打印 client func mai…

golang实现聊天室(三)

golang实现聊天室&#xff08;三&#xff09; 实现多个客户端同时给服务端发送消息&#xff0c;服务端接受并打印出来 client1 func main() {var conn, err net.DialTimeout("tcp", "127.0.0.1:5888", 30*time.Second)if err ! nil {log.Fatal("conn…

linux操作系统之线程同步及互斥量

&#xff08;1&#xff09;线程同步 1&#xff09;线程同步&#xff1a;指一个线程发出某一个功能运行时&#xff0c;在运行还没有结束的时候&#xff0c;该调用不返回。同时其它线程为保证数据的一致性&#xff0c;不能调用该功能。 2&#xff09;多个控制流共同操作一个共享资…

golang实现聊天室(四)

golang实现聊天室&#xff08;四&#xff09; 服务端给已经建立连接的客户端发送消息 client1 func main() {var conn, err net.DialTimeout("tcp", "127.0.0.1:6888", 30*time.Second)if err ! nil {log.Fatal("conn error")}for {conn.Write…

linux操作系统之读写锁

&#xff08;1&#xff09;读写锁&#xff1a;只有一把锁&#xff0c;但是有两种状态&#xff08;读&#xff0c;写&#xff09; 1&#xff09;读写锁的三种状态&#xff1a;读锁&#xff0c;写锁&#xff0c;不加锁 2&#xff09;读写锁特性&#xff08;12字&#xff09;&…

golang实现聊天室(五)

golang实现聊天室&#xff08;五&#xff09; 完成服务端广播消息 server package mainimport ("fmt""log""math/rand""net" )type Client_list struct {list map[net.Conn]string }func main() {client_list : Client_list{make(map…

linux操作系统之条件变量

&#xff08;1&#xff09;条件变量 条件变量本身不是锁&#xff0c;但它可以造成线程阻塞&#xff0c;通常与互斥锁配合使用。 &#xff08;2&#xff09;条件锁相关函数 pthread_cond_t类型&#xff0c;用于定义条件变量 1&#xff09;初始化一个条件变量&#xff1a;pthrea…

7. 整数反转 golang

官解 func reverse(x int) ( num int) {for x ! 0 {num num*10 x%10x x / 10}// 使用 math 包中定义好的最大最小值if num > math.MaxInt32 || num < math.MinInt32 {return 0}return }Me func reverse(x int) int {if x < 0 {return -1 * reverse_fun(-x)} else…