#include <stdio.h>
#include <signal.h>
// 信号处理函数
void sigint_handler(int signum) {
printf("Caught SIGINT signal.\n");
}
int main() {
// 设置信号处理函数
if (signal(SIGINT, sigint_handler) == SIG_ERR) {
perror("signal");
return 1;
}
printf("Waiting for SIGINT signal...\n");
while (1) {
// 程序在此处循环等待信号
}
return 0;
}
信号处理函数一般编写步骤:
- 定义信号处理函数:该函数接受一个
int
类型参数,用于表示接收到的信号编号。在函数体内编写处理信号的逻辑,如上面示例中的打印提示信息。
- 注册信号处理函数:使用
signal
函数(POSIX标准)或者sigaction
函数(更强大,可设置更多属性)来将定义好的信号处理函数与特定信号进行关联。例如上述代码中使用signal(SIGINT, sigint_handler)
将sigint_handler
函数与SIGINT
信号关联。如果注册失败,signal
函数会返回SIG_ERR
,需要进行错误处理。
- 程序等待信号:在注册好信号处理函数后,程序通常会进入一个循环(如示例中的无限循环)等待信号的到来,当信号到来时,系统会暂停当前正在执行的代码,跳转到信号处理函数执行,执行完毕后继续回到原来暂停的位置继续执行。