1. 程式人生 > >linux中alarm函式和pause函式詳解例項

linux中alarm函式和pause函式詳解例項

轉載原文:https://www.cnblogs.com/yxk529188712/p/4982401.html

alarm(time);執行之後告訴核心,讓核心在time秒時間之後向該程序傳送一個定時訊號,然後該程序捕獲該訊號並處理;
pause()函式使該程序暫停讓出CPU,但是該函式的暫停和前面的那個sleep函式的睡眠都是可被中斷的睡眠,也就是說收到了中斷訊號之後再
重新執行該程序的時候就直接執行pause()和sleep()函式之後的語句;
下面是一個定時2秒的例項:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

void sig_handler(int num)
{
    printf("receive the signal %d.\n", num);
}

int main()
{
    signal(SIGALRM, sig_handler);

    alarm(2);

    while(1){
        pause();
        printf("pause is over.\n");
    }

    exit(0);
}

如果我們想程式每2秒都定時一下,這樣實現也很簡單,我們在處理定時訊號的函式中再次定時2秒;例項如下:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

void sig_handler(int num)
{
    printf("receive the signal %d.\n", num);

    alarm(2);
}

int main()
{

    signal(SIGALRM, sig_handler);

    alarm(2);

    while(1){
        pause();
        printf("pause is over.\n");
    }

    exit(0);
}

可以看出程式每隔2秒就會收到訊號14,也就是SIGALRM訊號;

並且當處理完該訊號之後,直接執行pause()函式下面的語句;說明pause()是可被中斷的暫停;