📅  最后修改于: 2023-12-03 14:40:27.858000             🧑  作者: Mango
在C语言中,信号是指软件中断,用于通知进程发生了某种特定事件。例如,当用户按下中断键(Ctrl+C)时,操作系统会向进程发送一个信号,告诉它需要终止。
每个信号都有一个唯一的编号(signal number),从1开始,但有两个例外:
对于每个信号,都有一个默认的行为(default action),即当进程接收到该信号时将采取的操作。常见的默认行为有:
在C语言中,我们可以使用signal函数来处理信号。该函数的原型如下:
void (*signal(int sig, void (*func)(int)))(int);
其中,sig为信号编号,func为信号处理函数的地址。
信号处理函数的定义如下:
void func(int sig);
当进程接收到sig信号时,将调用func函数进行信号处理。在信号处理函数中,可以执行任意操作,但可能存在一些限制。例如,不要调用会阻塞的系统调用,否则可能导致死锁。
以下是一个简单的示例,演示了如何使用C语言处理信号。在该示例中,我们使用signal函数注册了一个信号处理函数,每当进程接收到SIGINT信号时,就会执行该函数,并输出一条消息。
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void sigint_handler(int sig)
{
printf("Caught SIGINT, exiting...\n");
exit(0);
}
int main()
{
signal(SIGINT, sigint_handler);
printf("Press Ctrl+C to terminate\n");
while(1);
return 0;
}
当运行该程序时,会输出一条提示信息,并等待用户按下中断键。当用户按下中断键时,程序将接收到SIGINT信号,调用sigint_handler函数进行处理,并退出程序。