【发布时间】:2021-03-24 12:30:32
【问题描述】:
考虑以下代码:
#include <signal.h>
#include <stdio.h>
void catch ()
{
printf("hi\n");
}
int main()
{
struct sigaction act;
act.sa_handler = catch;
sigaction(SIGINT, &act, NULL);
for(;;);
return 0;
}
当这个程序运行时。我第一次按 CTRL-C 时会打印“hi”。
但第二次程序退出。这可能是什么原因?
我想要的是程序在每次发出信号时都会捕获它。
【问题讨论】:
-
附带说明,您不应该从信号处理程序调用
printf,因为它不能保证是信号安全函数。见the signal-safety(7) man page。 -
您没有正确初始化结构。您还需要设置标志和掩码。
标签: c linux signals signal-handling sigaction