我正在编写代码,这些代码必须处理我给他的任何信号。我读到我应该做那样的事情
void signalHandler(int sig_num)
{
// some stuff
}
//My process
int i;
for (i = 1; i <= 64; i++)
signal(i, signalHandler);
这是正确的解决方案吗?
答案 0 :(得分:0)
如果您想使用相同的信号处理程序处理信号1到64,那么您就在正确的轨道上。该测试程序将通过打印其编号来处理信号1到64.
#include <stdio.h>
#include <signal.h>
void signalHandler(int sig_num)
{
printf("Signal %d caught!\n", sig_num);
}
int main(int argc, char const *argv[])
{
//My process
int i;
for (i = 1; i <= 64; i++) {
signal(i, signalHandler);
}
while (1);
return 0;
}
例如,在此程序运行时按CTRL + C.内核向程序发送信号2 SIGINT
,并调用signalHandler(2)
。该程序打印&#34;信号2被捕获!&#34;
Post-Facepalm编辑:这个程序显然需要用kill -9
命令终止........
答案 1 :(得分:0)
虽然@Dylan的解决方案似乎很好但它确实存在问题,这是signal
函数的兼容性问题。因此,建议您始终使用sigaction
。这是一个例子
#include <stdio.h>
#include <signal.h>
static void handler(int signo){
write(stdout, &signo, sizeof(int));
}
int main() {
struct sigaction sa;
sa.sa_handler = handler;
int i;
for (i = 1; i <= 64; i++) {
sigaction(i, &sa, NULL);
}
while(1);
return 0;
}