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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • [面试题]25个MySQL经典面试题「建议收藏」

    [面试题]25个MySQL经典面试题「建议收藏」经典题目1、MySQL的复制原理以及流程基本原理流程,3个线程以及之间的关联;2、MySQL中myisam与innodb的区别,至少5点2.1问5点不同;2.2innodb引擎的4大特性2.32者selectcount(*)哪个更快,为什么3、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义3.1varchar与char的区别3.2…

    2022年8月27日
    3
  • 东南大学计算机调剂上岸,这些985/211的分校上岸毫无难度??

    东南大学计算机调剂上岸,这些985/211的分校上岸毫无难度??不知不觉,22考研的时间已经过去一半了。考研er们,往后的时间需要抓紧了。尽管备考时间不充裕,仍有一些小伙伴还在各大院校间反复横跳,确定不了目标学校和专业。哎,就是没有压迫感,就是玩。讲真,确认目标院校太晚的话,后面复习的压力真的会成倍叠加,所以还是要尽快敲定自己的目标。本期为大家推荐几个985/211的异地校区,竞争压力相对较小,部分专业报录比较低,为小伙伴们的确定院校助一臂之力。东北大学(秦皇…

    2022年6月12日
    67
  • javascript refresh page 几种页面刷新的方法[通俗易懂]

    javascript refresh page 几种页面刷新的方法[通俗易懂]javascriptrefreshpage几种页面刷新的方法下面以三个页面分别命名为frame.html、top.html、bottom.html为例来具体说明如何做。frame.html由上(top.html)下(bottom.html)两个页面组成,代码如下:复制代码 代码如下:  frame       

    2022年7月18日
    14
  • django3.0异步_定时任务框架

    django3.0异步_定时任务框架celery介绍Celery是由Python开发、简单、灵活、可靠的分布式任务队列,是一个处理异步任务的框架,其本质是生产者消费者模型,生产者发送任务到消息队列,消费者负责处理任务。Celery侧重

    2022年8月7日
    2
  • 使用Java Service Wrapper设置tomcat作为linux服务并且开机自动启动

    使用Java Service Wrapper设置tomcat作为linux服务并且开机自动启动

    2021年5月6日
    175
  • mysql中phpmyadmin安装教程_phpMyAdmin 安装教程全攻略「建议收藏」

    mysql中phpmyadmin安装教程_phpMyAdmin 安装教程全攻略「建议收藏」管理MYSQL数据库的最好工具是PHPmyAdmin,现在最新版本是phpMyAdmin2.9.0.2,这是一个国际上开源的软件,一直在更新版本,你可以从http://www.phpmyadmin.net官方网站上下载到,安装后可以远程更新数据库(其实是在服务器上安装)。安装办法请参考:phpMyAdmin安装攻略1、先下载phpMyAdmin安装包,http://www.phpm…

    2022年5月31日
    31

发表回复

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

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