我們在程序中,很多次用到sleep()函數,讓它睡眠幾秒后再執行該進程。今天呢,我要給大家實現一下sleep函數。
看看代碼哦:
運行結果:
結果中每隔三秒鐘,打印一條語句。實現了sleep(3)的功能。
關于sleep函數,在這里,我們首先讓主函數調用了my_sleep函數,my_sleep函數又調用了注冊處理函數,注冊了一個SIGALRM的信號;然后為其設置鬧鐘,看主函數中的my_sleep函數要睡眠多長時間,調用pause等待,那么什么時候處理信號呢?此時,在用戶態由于接收到的信號將其保存起來,使其處于未決狀態,進入內核態處理異常,再回到用戶態執行SIGALRM信號處理函數,信號處理函數返回時執行特殊的系統調用再次進入內核,處理完異常回用戶態,從中斷的嚇一條指令開始執行。當捕捉到信號之后pause返回-1,再調用alarm(0)清空鬧鐘,調用sigaction恢復SIGALRM信號以前的處理動作。
外附一張圖哈:(很重要哦)
比較短小,歡迎來訪哦~~