当前位置: 首页 > 面试题库 >

Linux中Ctrl + C中断事件处理

巴帅
2023-03-14
问题内容

我正在开发使用C ++并使用Linux GNU C编译器进行编译的应用程序。

我想在用户使用Ctrl+ C 键中断脚本时调用函数。

我该怎么办?任何答案将不胜感激。


问题答案:

按时Ctr + C,操作系统将向该进程发送信号。有许多信号,其中之一是SIGINT。SIGINT(“程序中断”)是终止信号之一。

终止信号还有几种,但是关于SIGINT的有趣的事情是它可以由程序处理(捕获)。SIGINT的默认操作是程序终止。也就是说,如果您的程序没有专门处理此信号,则当您按下Ctr + C程序时,它将作为默认操作终止。

要更改信号的默认操作,您必须注册要捕获的信号。要在C程序中注册信号(至少在POSIX系统下),有两个功能

  1. signal(int signum,sighandler_t handler);
  2. sigaction(int signum,const struct sigaction * act,struct sigaction * oldact); 。

这些功能要求标头signal.h包含在C代码中。我在下面提供了signal带有注释功能的简单示例。

#include <stdio.h>
#include <stdlib.h>
#include <signal.h> //  our new library 
volatile sig_atomic_t flag = 0;
void my_function(int sig){ // can be called asynchronously
  flag = 1; // set flag
}

int main(){
  // Register signals 
  signal(SIGINT, my_function); 
  //      ^          ^
  //  Which-Signal   |-- which user defined function registered
  while(1)  
    if(flag){ // my action when signal set it 1
        printf("\n Signal caught!\n");
        printf("\n default action it not termination!\n");
        flag = 0;
    }     
  return 0;
}

注意:您只能在信号处理程序中调用安全/授权函数。

您可以使用gcc编译此代码,然后从shell中执行它。代码中有一个无限循环,它将一直运行,直到您SIGINT按发出信号为止Ctr + C



 类似资料:
  • 本文向大家介绍浅谈ctrl+c,ctrl+d,ctrl+z在linux中的意义,包括了浅谈ctrl+c,ctrl+d,ctrl+z在linux中的意义的使用技巧和注意事项,需要的朋友参考一下 ctrl+c和ctrl+z都是中断命令,但是他们的作用却不一样. ctrl+c是强制中断程序的执行。 ctrl+z的是将任务中断,但是此任务并没有结束,他仍然在进程中他只是维持挂起的状态,用户可以使用fg/b

  • 问题内容: 我正在(自制)基于C的python扩展中进行一些计算量大的模拟。有时我会出错,并想终止模拟。但是,Ctrl- C似乎没有任何作用(除了打印到屏幕上),因此我必须使用或系统监视器终止该进程。 据我所知,python只是等待C扩展完成,并且在这段时间内并没有真正与其通信。 有没有办法使这项工作? 更新 :主要答案(针对我的特定问题)是:1.重写代码以定期将控制权传递回调用方,或2.使用 问

  • 本文向大家介绍Linux命令中Ctrl+z、Ctrl+c和Ctrl+d的区别和使用详解,包括了Linux命令中Ctrl+z、Ctrl+c和Ctrl+d的区别和使用详解的使用技巧和注意事项,需要的朋友参考一下 Ctrl+c,Ctrl+d,Ctrl+z在Linux中意义 Ctrl+c和ctrl+z都是中断命令,但是他们的作用却不一样. Ctrl+c是强制中断程序的执行。 Ctrl+z的是将任务中断,但

  • 我们有一个使用Disruptor框架的系统,它有五个注册阶段来实现EvenetHandler。 阶段按顺序工作,因此请求只能在第一阶段完成时移动到第二阶段,该移动由Disruptor内部维护。 我们对第三阶段有问题,这是瓶颈,需要大量时间,因为它进行不同的HTTP调用并将响应存储在请求对象中。 因此,我们希望在第三阶段花了一段时间之后,将请求(无论有什么响应)提前到第四和第五阶段。 如何超时任何特

  • 问题内容: 我正在开发Java应用程序,当我在jTable上按CTRL + C时,我可以获取剪贴板并将其粘贴到Excel中。我想实现一个功能相同的按钮。我如何获得该函数,侦听器,无论可以用来实现此功能的是什么? PS:我曾尝试看过其他问题,但似乎没有人在寻找我想要的东西。 问题答案: 该表的复制操作的关键是: 但我看不到回收的有用方法: 相反,只需将表的当前选择导出到系统剪贴板。 附录:此变体依赖