#include <stdio.h>
#include <signal.h>
#include <unistd.h>
// 信号处理函数
void signal_handler(int signum) {
printf("接收到SIGINT信号,程序继续运行。\n");
}
int main() {
// 注册信号处理函数
if (signal(SIGINT, signal_handler) == SIG_ERR) {
printf("\n 无法捕获SIGINT信号\n");
return 1;
}
printf("按Ctrl+C发送SIGINT信号。程序将继续运行...\n");
// 程序主循环,保持运行
while(1) {
sleep(1);
}
return 0;
}
主要涉及函数及其参数含义
signal
函数
- 函数原型:
void (*signal(int signum, void (*handler)(int)))(int);
- 参数:
signum
:要捕获的信号编号,这里使用SIGINT
(通常值为2),代表用户通过Ctrl+C
产生的中断信号。
handler
:信号处理函数的指针,这里是自定义的signal_handler
函数。它接收一个int
类型参数,该参数就是接收到的信号编号。signal
函数返回旧的信号处理函数指针,如果出错则返回SIG_ERR
。
sleep
函数
- 函数原型:
unsigned int sleep(unsigned int seconds);
- 参数:
seconds
表示程序要暂停的秒数。在上述代码中,主循环使用sleep(1)
让程序每秒循环一次,同时等待信号的到来。这样可以避免程序空转占用过多CPU资源。