在C语言中,可以使用signal()函数来设置信号处理程序,其函数原型如下:
void (*signal(int sig, void (*func)(int)))(int);
其中,sig表示信号类型,func为信号处理函数指针。在信号处理函数中,一般需要使用一些系统调用来处理信号,如打印日志、修改程序状态等。另外,需要注意一些信号的默认行为,如SIGKILL和SIGSTOP不能被捕获和处理,而SIGINT默认会中断进程。
下面给出一个简单的示例代码,通过设置信号处理程序,在收到SIGINT信号时,输出一行提示信息并退出:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void sigint_handler(int sig) {
printf("Received SIGINT, exiting...\n");
exit(0);
}
int main() {
signal(SIGINT, sigint_handler);
while (1) {
printf("Running...\n");
sleep(1);
}
return 0;
}
在上述代码中,首先定义了一个名为sigint_handler的信号处理函数,当收到SIGINT信号时,会打印提示信息并使用exit()函数退出进程。然后在main函数中,使用signal()函数将SIGINT信号和对应的处理函数绑定。最后进入一个死循环,每隔1秒打印一行信息,直到收到SIGINT信号并执行处理函数退出进程。