signal() – C函数
C库函数 void (*signal(int sig, void (*func)(int)))(int)设置一个函数来处理信号,即信号数量sig的信号处理程序 。
声明
以下是signal()函数的声明。
void(*signal(int sig,void(*func)(int)))(int)
参数
-
sig -- 这是信号的处理功能被设置的号码。以下是几个重要的标准信号的数字:
| macro | signal |
|---|---|
| SIGABRT | (Signal Abort) Abnormal termination, such as is initiated by the function. |
| SIGFPE | (Signal Floating-Yiibai Exception) Erroneous arithmetic operation, such as zero divide or an operation resulting in overflow (not necessarily with a floating-yiibai operation). |
| SIGILL | (Signal Illegal Instruction) Invalid function image, such as an illegal instruction. This is generally due to a corruption in the code or to an attempt to execute data. |
| SIGINT | (Signal Interrupt) Interactive attention signal. Generally generated by the application user. |
| SIGSEGV | (Signal Segmentation Violation) Invalid access to storage: When a program tries to read or write outside the memory it is allocated for it. |
| SIGTERM | (Signal Terminate) Termination request sent to program. |
-
func -- 这是一个指向函数的指针。这可以是由程序员或一个以下预定义的函数的定义的函数:
| SIG_DFL | 默认处理:对于某一特定信号,该信号处理的默认操作。 |
| SIG_IGN | 忽略信号:信号被忽略。 |
返回值
这个函数返回前一个信号处理程序或错误SIG_ERR的值。
例子
下面的例子显示了signal()函数的用法。
#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<signal.h>void sighandler(int);int main(){ signal(SIGINT, sighandler);while(1){ printf("Going to sleep for a second... "); sleep(1);}return(0);}void sighandler(int signum){ printf("Caught signal %d, coming out... ", signum);exit(1);}
让我们编译和运行上面的程序,这将产生以下结果,程序将无限循环中去。跳出程序使用Ctrl + C键。
Going to sleep for a second... Going to sleep for a second... Going to sleep for a second... Going to sleep for a second... Going to sleep for a second... Caught signal 2, coming out...