c语言sigaction,使用sigaction(),c[通俗易懂]

c语言sigaction,使用sigaction(),c[通俗易懂]让我们试着了解修改后的代码版本会发生什么:#include#includevoidtermination_handler(intsignum){printf(“Hellofromhandler\n”);sleep(1);}intmain(void){//Structsthatwilldescribetheoldactionandthenewaction//ass…

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

让我们试着了解修改后的代码版本会发生什么:

#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,&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,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结构的详细说明.

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

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

(0)
上一篇 2022年5月26日 上午8:40
下一篇 2022年5月26日 上午9:00


相关推荐

  • 打印机显示smtp服务器未设置,打印机smtp服务器设置

    打印机显示smtp服务器未设置,打印机smtp服务器设置打印机smtp服务器设置内容精选换一换安装完模型小型化工具,量化模型前,用户需要获取并安装Caffe源代码增强包caffe_patch.tar.gz,在Caffe源码中增加部分源码文件、动态库文件及修改部分源代码。安装过程整体分为两部分:拷贝新增源码和动态库文件到Caffe环境caffe-master工程目录下。对Caffe环境caffe-master工程目录下部分文件安装p本文档所述Demo在…

    2022年10月20日
    6
  • 全网最全 Cursor 配置指南:从入门到高效工作流!建议收藏

    全网最全 Cursor 配置指南:从入门到高效工作流!建议收藏

    2026年3月16日
    4
  • 八个经验处理开关电源PCBLayout

    八个经验处理开关电源PCBLayout转载玩转嵌入式 2021 09 2111 11 素材来源 八号线攻城狮其实对于一个开关电源工程师而言 PCB 的绘制其实是对一款产品的影响至关重要的部分 如果你不能很好的 Layout 的话 整个电源很有可能不能正常工作 最小问题也是稳波或者 EMC 过不去 这是别人家的成品开关电源 模组 今天以这个电源模组的设计重点跟大家聊聊 1 经验一 安规走线间距这个是写在协议里面的 如果你不按照这个做 耐压测试一定是过不了的 因为高电压 会直接空气击穿 注意保险丝之前的距离是比较远的 要求 3

    2026年3月19日
    1
  • 设计模式之职责链模式

    相信大家都玩过类似于“斗地主”的纸牌游戏,某人出牌给他的下家,下家看看手中的牌,如果要不起,则将出牌请求转发给他的下家,其下家再进行判断。一个循环下来,如果其他人都要不起该牌,则最初的出牌者可以打出新

    2021年12月28日
    66
  • 未能连接一个windows服务器,Win7出现未能连接一个Windows服务的解决办法

    未能连接一个windows服务器,Win7出现未能连接一个Windows服务的解决办法近日有网友“所爱隔山海”Win7电脑在开机的时候遇到了开机很慢,开机后提示:未能连接一个Windows服务。如果遇到电脑出现未能连接一个Windows服务该如何解决呢?这就是小编今天要分享的一个电脑小技巧。Win7出现“未能连接一个Windows服务”错误提示,主要是由于电脑系统中的“SystemEventNotification”服务没有正常开启导致的,可能是用户在使用一些第三方安全软件优化…

    2022年5月14日
    77
  • 卷积神经网络和图像识别[通俗易懂]

    卷积神经网络和图像识别[通俗易懂]卷积神经网络与图像识别我们介绍了人工神经网络,以及它的训练和使用。我们用它来识别了手写数字,然而,这种结构的网络对于图像识别任务来说并不是很合适。本文将要介绍一种更适合图像、语音识别任务的神经网络结构——卷积神经网络(ConvolutionalNeuralNetwork,CNN)。说卷积神经网络是最重要的一种神经网络也不为过,它在最近几年大放异彩,几乎所有图像、语音识别领域的…

    2022年6月2日
    48

发表回复

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

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