sigaction

2024-03-11 02:38
文章标签 sigaction

本文主要是介绍sigaction,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

信号捕捉

防止进程意外死亡

typedef void(*sighandler_t)(int);

sighandler_t signal(int signum,sighander_t handler);
signum要捕捉的信号
handler要执行的捕捉函数指针,函数应该声明void func(int);

注册捕捉函数
int sigaction(int signum,const struct sigaction *act,struct sigaction *oldact);
signum 捕捉的信号
act 传入的动作
oldact 原动作,恢复现场
struct sigaction{
void (*sa_handler)(int); //函数指针
void (*sa_sigaction)(int,siginfo_t *,void *);
sigset_t sa_mask; //执行捕捉函数期间,临时屏蔽的信号集
int sa_flags; //一般为0,SAT_SIGINFO会使用第二个函数指针
void (*sa_restorer)(void); //无效
};

sigaction.c

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <sys/type.h>void catch_sig(int num){printf("catch %d sig\n",num);
}int main(int argc,char * argv[])
{//注册一下捕捉函数struct sigaction act;act.sa_flags=0;act.sa_handler=catch_sig;sigempty(&act.sa_mask);sigaction(SIGALRM,&act,NULL);//setitimerstruct itimerval myit={{3,0},{5,0}};setitimer(ITIMER_REAL,&myit,NULL);while(1){printf("xxx\n");sleep(1);}return 0;
}

sigaction_mask.c

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <sys/type.h>void catch_sig(int num){printf("begin call,catch %d sig\n",num);sleep(5); //模拟捕获函数执行时间较长printf("end call,catch %d sig\n",num);
}int main(int argc,char * argv[])
{//注册一下捕捉函数struct sigaction act;act.sa_flags=0;act.sa_handler=catch_sig;sigempty(&act.sa_mask);sigaddset(&act.sa_mask,SIGQULT); //临时屏蔽ctrl+\信号sigaction(SIGINT,&act,NULL);while(1){printf("xxx\n");sleep(1);}return 0;
}

这篇关于sigaction的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/796343

相关文章

Linux 信号 signal,sigaction,sigqueue,kill,相关函数

驱动与应用的结合,参考我的这篇:https://blog.csdn.net/rjszcb/article/details/113573517 一、 什么是信号 信号是软中断,用于通知进程某个事件已经发生。进程可以选择如何响应信号:忽略、默认处理、自定义处理等。 常见信号有:SIGINT(键盘中断)、SIGKILL(强制终止)、SIGSTOP(暂停进程)、SIGCONT(继续运行进程)等。 信号

LINUX信号-sigaction更强壮的信号注册函数

测试环境:ubuntu 16.0 编译器:       g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609 (查看版本指令:g++ --version) 实验目的: 使用更强壮的linux信号注册函数  int sigaction(int signum, const struct sigaction *act,struct sigactio

【LinuxC语言】sigaction

文章目录 前言功能函数定义struct sigaction 结构体使用示例 总结 前言 在Linux系统编程中,信号(Signal)是一种重要的进程间通信机制。信号可以用来通知进程发生了某个事件,比如中断、终止、非法内存访问等。处理信号的方式有多种,其中sigaction是一个强大且灵活的函数,用于设置信号处理程序。与传统的signal函数相比,sigaction提供了更多

交叉编译程序,提示 incomplete type “struct sigaction“ is not allowed

问题描述 incomplete type "struct sigaction" is not allowed 解决办法 在代码的最顶端添加如下代码即可 #define _XOPEN_SOURCE 此定义不是简单的宏定义,是使程序符合系统环境的不可缺少的部分 _XOPEN_SOURCE为了实现XPG:The X/Open Portability Guide 的功能。 或者 在代

【Linux】详解用户态和内核态内核中信号被处理的时机sigaction信号自定义处理方法

一、用户态和内核态的理解         在操作系统中,用户态和内核态是两种主要的执行模式,它们代表了不同的访问级别和权限,用于确保系统的安全和稳定性。 1.1、用户态         用户态是操作系统中用户进程的运行状态。在这种状态下,进程只能访问受限的系统资源,并且不能执行某些特权操作。用户态下的进程没有权限直接访问硬件或执行某些敏感的系统调用。它们必须通过系统调用接口来请求内核态的服务

signal和sigaction

signal用于系统信号回调处理,有一下几个要注意的问题。   1)系统调用的中断重入。 2)不可靠性。 3)某些函数的不可重入性,如malloc,或者使用全局静态变量等返回结果等。     下面是用老的signal的信号处理方式:     int main(int argc,char** args){     char cs[LINE_LEN];     signal(SIG

《UNIX环境高级编程》笔记--sigaction函数

sigaction函数的功能是检查或修改指定信号相关联的处理动作,此函数取代UNIX早期版本使用的signal函数。 #include<signal.h>int sigaction(int signo, const struct sigaction *restrict act, struct sigaction *restrict oact);//若成功则返回0,出错则返回-1.

154 Linux C++ 通讯架构实战9 ,信号功能添加,信号使用sa_sigaction 回调,子进程添加,文件IO详谈,守护进程添加

初始化信号 使用neg_init_signals(); 在nginx.cxx中的位置如下 //(3)一些必须事先准备好的资源,先初始化ngx_log_init(); //日志初始化(创建/打开日志文件),这个需要配置项,所以必须放配置文件载入的后边;//(4)一些初始化函数,准备放这里 if(ngx_init_signals() != 0

sigaction函数 - 改变信号行为

函数原型: int sigaction(int sig, const struct sigaction * act, struct sigaction * oact); 函数描述: The sigaction() function allows the calling process to examine and/or specify the action to be ass

Linux中sigaction函数和SIGCHLD信号的使用

sigaction函数: 函数说明:注册一个信号处理函数 函数原型:int sigaction(int signum, const struct sigaction *act,                      struct sigaction *oldact); 函数参数: signum:捕捉的信号act:传入参数,新的处理方式oldact:传出参数,旧的处理方式 The s