信号处理器简介
信号处理器程序(也称为信号捕捉器)是当指定信号传递给进程时将会调用的一个函数。这里会学习信号处理器的基本原理,后面将继续学习。
调用信号处理器程序,可能会随时打断主程序流程;内核代表进程来调用处理器程序,当处理器返回时,主程序会在处理器打断的位置恢复执行。
虽然信号处理器程序几乎可以为所欲为,但一般而言,设计应力求简单。
程序20-1
#include <signal.h> static void sigHandler(int sig) { printf("Ouch! "); /* Unsafe */ } int main(int argc, char *argv[]) { int j; if( signal(SIGINT, sigHandler) == SIG_ERR) printf("error "); for(j = 0; ; j++) { printf("%d ", j); sleep(3); } }
程序清单20-1所示为一个简单的信号处理器函数,由主程序为SIGINT信号而建立.当键入中断字符(通常为Control-C)时,终端驱动程序将产生该信号。处理器只是简单打印一条消息,随机返回。
主程序会持续循环。每次迭代,程序都将递增计数器的值并将其打印出来,然后休眠几秒钟。
内核在调用信号处理器程序时,会将引发调用的信号编号作为一个整型参数传递给处理器函数。如果信号处理器程序只捕获一种类型的信号,那么这个参数几乎无用。然而,如果安装相同的处理器来捕获不同类型的信号,那么就可以利用此参数来判定引发对外处理器调用的是何种信号。