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


相关推荐

  • PyCharm代码整体缩进,反向缩进

    PyCharm代码整体缩进,反向缩进整体缩进 鼠标拉选住代码块 按下 tab 键 反向缩进 鼠标拉选住代码块 按下 tab shift 键

    2026年3月27日
    2
  • date类和calendar类的区别_java类中可以定义类吗

    date类和calendar类的区别_java类中可以定义类吗Date类在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。这里简单介绍一下Date类的使用。1、使用Date类代表当前系统时间                  Dated=newDate();                  System.out.pr

    2025年12月7日
    5
  • 镜像二十四小时_docker 运行镜像

    镜像二十四小时_docker 运行镜像一、查看当前docker中下载的镜像,如下图,当前我的Docker容器中存在两个镜像,tomcat、mysql二、启动镜像(因启动命令参数过多,同时各种镜像启动时可以增加额外的参数,本次以启动mysql5.6为例)dockerrun-p本机映射端口:镜像映射端口-d–name启动镜像名称-e镜像启动参数镜像名称:镜像版本号参数释义:-p本机端口和容器启动端口映射 -d后台运行 –name…

    2025年12月10日
    5
  • 10个的常用PyCharm插件

    10个的常用PyCharm插件安装方法先来说说插件的安装方法,一点都不难。选择顶部菜单栏的PyCharm选项,打开Preferences,点击plugins,在右侧的文本框中输入想要查看的插件名称,在下方就会罗列出已经安装的相关的插件。找到我们所需要的对应插件之后,点击install即可完成下载,然后重启一下Pycharm即可插件介绍1、MaterialThemeUILite该插件的作用在于能够为Pycharm提供多种不同的页面风格。设置:选择顶部菜单栏的PyCharm选项,打开Pref

    2022年6月24日
    65
  • html中的标签属性大全,html标签属性大全(完美版)

    html中的标签属性大全,html标签属性大全(完美版)html 标签属性大全最好最前的帮助文档 html 标签属性大全 完美版 html 标签属性大全是朋友们整理常用的 html 标签 和大家更好的交流沟通 学习 html 标签属性大全 html 标签 lt 普通卷动 滑动 预设卷动 来回卷动 向下卷动 向上卷动向右卷动向左卷动 卷动次数 设定宽度 设定高度 设定背景颜色 设定滚动速度 设定卷动时间 鼠标经过上面时停

    2026年3月17日
    3
  • pycharm 使用 anaconda 环境[通俗易懂]

    pycharm 使用 anaconda 环境[通俗易懂]两个方法一:从annaconda内部打开pycharm这里有个下拉框可以选选择你要的anaconda环境再launch你的pycharm但有时候好像不大灵光还是用不上这个环境二:方法二就是万能方法从pycharm内部来配置环境,非常简单。界面最右上角齿轮图标,点击。找到interpreter这里下拉框可以选,发现没有anaconda的环境,你就showall然后点左上角加号选anaconda环境,再去添加你已经存在的anaconda环境。…

    2022年8月28日
    7

发表回复

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

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