c语言sigaction,使用sigaction(),c
让我们试着了解修改后的代码版本会发生什么:
#include
#include
void termination_handler(int signum)
{
printf("Hello from handler\n");
sleep(1);
}
int main (void)
{
//Structs that will describe the old action and the new action
//associated to the SIGINT signal (Ctrl+c from keyboard).
struct sigaction new_action, old_action;
//Set the handler in the new_action struct
new_action.sa_handler = termination_handler;
//Set to empty the sa_mask. It means that no signal is blocked
// while the handler run.
sigemptyset(&new_action.sa_mask);
//Block the SEGTERM signal.
// It means that while the handler run, the SIGTERM signal is ignored
sigaddset(&new_action.sa_mask, SIGTERM);
//Remove any flag from sa_flag. See documentation for flags allowed
new_action.sa_flags = 0;
//Read the old signal associated to SIGINT (keyboard, see signal(7))
sigaction(SIGINT, NULL, &old_action);
//If the old handler wasn't SIG_IGN (it's a handler that just
// "ignore" the signal)
if (old_action.sa_handler != SIG_IGN)
{
//Replace the signal handler of SIGINT with the one described by new_action
sigaction(SIGINT,&new_action,NULL);
}
while(1)
{
printf("In the loop\n");
sleep(100);
}
return 0;
}
因此,如果您编译并启动它,然后按Ctrl C,那么您将执行处理程序消息,然后您立即返回主要的睡眠状态.您可以根据需要多次执行此操作,并且仍会显示处理程序消息和内联消息.
因此,您提供了一个函数,sigaction会执行将信号与处理程序挂钩所需的所有操作.
现在,sigterm怎么样?如果你在termination_handler中增加了睡眠时间,你可以在按下Ctrl C后键入类似“pkill –signal SIGTERM ./a.out”的内容.然后,会发生什么?没有!在termination_handler运行时,SIGTERM信号被阻止.但是一旦你回到主,现在SIGTERM将杀死应用程序.
(请记住,在测试此代码时,您仍然可以通过发送SIGKILL信号来终止应用程序.)
如果你想了解更多,并且对信号有更多的乐趣,你可以使用signal manual和sigaction manual来说明更多信息.请注意,您还具有sigaction结构的详细说明.
c语言sigaction,使用sigaction(),c相关推荐
- linux c 自定义 sigaction,Linux sigaction信号机制积累
1.Linxu下使用signal()函数获取信号: signal()函数: #include typedef void (*sighandler_t)(int); sighandler_t signa ...
- linux下sigaction函数,sigaction函数解析
sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作). 他是POSIX的信号接口,而signal()是标准C的信号接口(如果程序必须在非POSIX系统上运行,那么就应该 ...
- linux系统发送信号的系统调用是,linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction...
信号发送函数sigqueue和信号安装函数sigaction sigaction函数用于改变进程接收到特定信号后的行为. sigqueue()是比较新的发送信号系统调用,主要是针对实时信号提出的(当然 ...
- linux操作系统信号捕捉函数之sigaction用法小结
(1)sigaction函数:注册一个信号捕捉函数(不参与捕捉信号,信号由内核捕捉),并修改原来的信号处理动作 (2)函数原型及头文件 头文件:#include<signal.h> 函数原 ...
- 信号发送函数sigqueue和信号安装函数sigaction
一,sigaction() #include <signal.h> int sigaction(int signum,const struct sigaction *act,struct ...
- 嵌入式Linux系统编程学习之十五sigaction信号处理机制
文章目录 一.信号处理情况分析 二.sigaction 信号处理注册 三.sigprocmask 信号阻塞 一.信号处理情况分析 在 signal 处理机制下,还有许多特殊情况需要考虑: 注册一个 ...
- sigaction介绍
sigaction 原型: int sigaction(int signo,const struct sigaction *restrict act, struct sigaction *restri ...
- 信号的捕捉与sigaction函数
一.内核如何实现信号的捕捉 如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号.由于信号处理函数的代码是在用户空间的,处理过程比较复杂,举例如下: 1. 用户程序注册了SI ...
- Linux signal、sigaction的使用总结
目录 一.什么是信号 二.信号的种类 三.信号的处理 -- signal()函数 四.信号处理 -- sigaction()函数(扑获信号) 五.扑获信号示例 一.什么是信号 信号是UNIX和Linu ...
最新文章
- win10安装jdk1.8
- Noip2012同余方程
- 浅谈Socket编程
- 试图执行系统不支持的操作
- Linux C: 文件操作相关的系统调用
- spring的注解开发@Component @Bean @Value @Autowired、@Qualifier @PropertySource @Configuration
- 在JBoss 7中使用HA Singleton
- Python 装饰器详解(中)
- js去掉html标签和去掉字符串文本的所有的空格
- pythonfor循环遍历字典的属性_python-嵌套和for循环中的字典和列表中的项...
- python argparse 简明教程
- Memset、Memcpy、Strcpy 的作用和区别(转)
- 关于Ubuntu的联网操作
- 关于货币流动的一点思考
- C++ 程序设计 week5 魔兽世界二: 装备
- 成成你好呀(C知识点整理二)
- yum不能使用了,怎么办?记下来!!!
- BZOJ[3620]似乎在梦中见过的样子 KMP
- 《作业疯了》超奇葩游戏挑战你的脑细胞
- Linux系统文件体系
热门文章
- viewport是什么?(江湖称响应式web设计)
- Hadoop企业优化
- Java程序设计----Java编程基础
- leetcode 453,462. Minimum Moves to Equal Array Elements I, II | 453, 462. 最少移动次数使数组元素相等(图解)
- 【Servlet】HTTP 协议之请求方式、Servlet介绍、Servlet 的生命周期
- 【Java反射】反射机制性能问题、反射操作泛型
- 【JavaWeb】Response请求转发与重定向辨析
- java高级用法之:调用本地方法的利器JNA
- Leet Code OJ 26. Remove Duplicates from Sorted Array [Difficulty: Easy]
- 操作系统中的同步和异步