【发布时间】:2016-04-28 10:54:21
【问题描述】:
我正在努力实现使用 C 语言在进程中捕获信号的能力。
谁能帮我提供一个工作示例?
谢谢。
【问题讨论】:
-
到目前为止您尝试过什么?您是否查看过其他在线可用的最低工作示例?如果是这样,你遇到过什么问题,即你被卡住了吗?你读过信号手册页吗?以下是一些帮助您入门的资源:@987654321@ 和:gist.github.com/aspyct/3462238
我正在努力实现使用 C 语言在进程中捕获信号的能力。
谁能帮我提供一个工作示例?
谢谢。
【问题讨论】:
您需要使用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;
}
【讨论】:
printf() 不是异步信号安全的。要直接 printf 形成信号处理程序,请使用 write()。
printf() 只是为了表明我已经捕获了信号,但是,你会建议怎么做呢? @alk
write() 执行无缓冲 I/O,而 printf() 使用缓冲区。 SO上也有很多关于这个主题的内容。
signal接口它被认为是过时的,更喜欢sigaction。