sigalrm信号, 一般可以由alarm或者setitmer来发出。 可以用于定多长时间触发一个事件.
例如在等待用户输入时, 超过多少秒就触发这个信号. 在触发后, 用户输入被中断, 跳转到信号处理函数, 信号处理函数结束后, 接着用户输入的下一个语句执行, 用户输入不再执行. 如下 :
执行 :
注意这个程序有问题, 因为每隔5秒就会触发这个信号.
应该改成 :
在程序中要忽略某些信号或者要还原信号处理函数怎么办呢?
如果在程序中要忽略对信号的响应. 使用如下方法 :
reg_handler(sigalrm, sig_ign), 表示遇到sigalrm信号不作任何响应.
例如在以上代码中添加
则在程序执行过程中使用 "kill -int 进程号", 或者"键入ctrl+c" 都无响应.
如果在程序中要还原原来的signal handler, 使用如下 :
reg_handler(sigint, sig_dfl);
注意,
因为sigkill和sigstop信号不能调用sigaction注册handler function. 所以也就不存在忽略这两个信号的可能了.
下面的例子, 问问题, 如果5秒内未答出则超时, 并raise(sigint) , 调用end_game结束程序. 或者直接ctrl+c 发出sigint信号调用end_game结束程序 :
其他 :
【参考】
setitimer :
http://blog.163.com/digoal@126/blog/static/163877040201272041953707/