日期:2014-05-16 浏览次数:20795 次
本文出自http://www.wenbanana.com/?p=421稻草人博客,欢迎访问!
信号是系统响应某些状况而产生的事件,进程在接受到信号时会采取相应的行动。信号可以明确地由一个进程产生发送到另外一个进程,用这种办法传递信息或协调操作行为。
进程可以生成信号、捕捉并相应信号或屏蔽信号。信号的名称是在头文件signal.h里定义。下面我列出一部分,如下:
---------------------------------------------
信号名称 说明
---------------------------------------------
SIGALRM 警告钟
SIGHUP 系统挂断
SIGINT 终端中断
SIGKILL 停止进程(此信号不能被忽略或捕获)
SIGPIPE 向没有读者的管道写数据
SIGQUIT 终端退出
SIGTERM 终止
---------------------------------------------
如果进程接收到上表中的某个信号但实现并没有安排捕捉它,进程就会立刻终止。
#include <signal.h> #include <stdio.h> #include <unistd.h> void ouch(int sig) {/*此处,signal(SIGINT, SIG_DFL),SIG_DFL表示 ouch函数捕获到SIGINT信号,作出输出信息处理之后,恢复了SIGINT的默认行为*/printf("OUCH! - I got signal %d\n", sig); (void) signal(SIGINT, SIG_DFL);}int main(){ (void) signal(SIGINT, ouch); while(1) { printf("Hello World!\n"); sleep(1); }} 这个程序就是截获组合键Ctrl+C产生的SIGINT信号。没有信号出现时,它每隔一秒就会输出一个消息。第一次按下Ctrl+C产生的SIGINT信号,
#include <signal.h> #include <stdio.h> #include <unistd.h> static int alarm_fired = 0; void ding(int sig) { alarm_fired = 1; } int main() { int pid; printf("闹钟程序已经启