我正在使用
终端输出:
编辑:这里是我包含的标题
感谢您的回复。我现在正在阅读它们!
signal.h
和 unistd.h
库,并遇到了一些问题。在下面的代码中,当我通过调用 CTRL-C
发送 SIGINT
信号给我的运行程序时,该信号被捕获。然而,当再次按下 CTRL-C
时,程序终止了。我理解的是,每次按下 CTRL-C
都应该打印出 "Received signal 2"
。
我的信号理解有误吗,还是我的代码存在错误?
感谢您的帮助!
#include "handle_signals.h"
void sig_handler(int signum)
{
printf("\nReceived signal %d\n", signum);
}
int main()
{
signal(SIGINT, sig_handler);
while(1)
{
sleep(1);
}
return 0;
}
终端输出:
xxx@ubuntu:~/Dropbox/xxx/handle_signals$ ./handle_signals
^C
Received signal 2
^C
xxx@ubuntu:~/Dropbox/xxx/handle_signals$
编辑:这里是我包含的标题
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void sig_handler(int signum);
感谢您的回复。我现在正在阅读它们!
killall -SIGINT yourprogram
,看看是否效果更好。 - Marcus Müllerhandle_signals.h
文件里有什么?另外请注意,严格来说,信号处理程序不应调用其他系统函数,如printf
,它只应设置一些标志变量之类的东西。 - Marianprintf(3)
不是异步信号安全的。它可能会因为各种原因调用malloc(3)
或free(3)
,例如初始化标准I/O库内部使用的缓冲区。它不应该在信号处理程序中使用。 - Filipe Gonçalves