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/