【问题标题】:Capturing signals in C在 C 中捕获信号
【发布时间】:2016-04-28 10:54:21
【问题描述】:

我正在努力实现使用 C 语言在进程中捕获信号的能力。

谁能帮我提供一个工作示例?

谢谢。

【问题讨论】:

  • 到目前为止您尝试过什么?您是否查看过其他在线可用的最低工作示例?如果是这样,你遇到过什么问题,即你被卡住了吗?你读过信号手册页吗?以下是一些帮助您入门的资源:@​​987654321@ 和:gist.github.com/aspyct/3462238

标签: c process signals


【解决方案1】:

您需要使用signal.h 库。

这是一个工作示例,我在其中捕获 SIGINT 并将消息打印到 STDOUT:

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

void sig_handler(int signo)
{
    if (signo == SIGINT)
        write(0, "Hello\n", 6);
}

int main(void)
{
    signal(SIGINT, sig_handler);
    // Just to testing purposes
    while(1)
        sleep(1);
    return 0;
}

【讨论】:

  • 它运行良好,谢谢!我是编程和 Stack Overflow 的新手,感谢您的耐心等待
  • printf() 不是异步信号安全的。要直接 printf 形成信号处理程序,请使用 write()
  • printf() 只是为了表明我已经捕获了信号,但是,你会建议怎么做呢? @alk
  • 因为 write() 执行无缓冲 I/O,而 printf() 使用缓冲区。 SO上也有很多关于这个主题的内容。
  • 不要使用signal接口它被认为是过时的,更喜欢sigaction
猜你喜欢
  • 2013-12-19
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 2013-04-16
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多