【问题标题】:Run something once the program has been terminated using CTRL+C [duplicate]使用 CTRL+C 终止程序后运行某些东西 [重复]
【发布时间】:2015-08-21 19:21:12
【问题描述】:

有没有办法在程序终止之前运行函数?例如。用户按下 ctrl+c 并且您想向他们打印一些东西。谢谢!

【问题讨论】:

  • 对不起,我应该更具体一点 - 这是针对 Linux 的

标签: c function terminal termination


【解决方案1】:

对于 *nix 系统,您可以使用 signal() 函数。

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

volatile sig_atomic_t sig_flag = 0;

void sig_handler(int sig)
{
    // A signal has been received. Set `sig_flag` to the value of the signal
    sig_flag = sig;
}

int main()
{
    // Call sig_handler on SIGINT (Ctrl-C)
    signal(SIGINT, sig_handler);

    while (sig_flag != SIGINT);
    printf("Bye\n");

    return 0;
}

编辑:根据 Basile 的评论,我应该提到,只有少数几个函数可以在信号处理程序下安全使用,因为处理程序是异步调用的。安全功能列表可在signal(7)

下找到

【讨论】:

  • 是的,但是您应该提到异步信号安全,并且可能明确提及signal(7)
  • 如果我想将参数传递给该函数,我将如何使用此示例? (如果可能,不使用全局变量)
  • @user92489827:你不能将参数传递给信号,你需要使用全局变量。正如我试图解释的那样,信号处理程序应该非常简单
  • 顺便说一句,您不能在 once 程序终止时运行某些东西,但 before 它会运行(以及 after @ 987654327@已收到)
  • 特别是在 Linux 上,您还可以使用 signalfd(2) 并在事件循环中轮询该描述符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
  • 2018-02-21
  • 2014-07-10
  • 1970-01-01
  • 1970-01-01
  • 2019-04-06
相关资源
最近更新 更多