1. 程式人生 > >Linux高階程式設計基礎——程序間通訊之訊號的安裝與傳送

Linux高階程式設計基礎——程序間通訊之訊號的安裝與傳送

程序間通訊之訊號的安裝與傳送

  1. 呼叫setitimer函式分別觸發SIGALRM訊號,SIGVTALRM訊號,SIGPROF訊號 ;(可以由多程序分別觸發每個訊號)
  2. 編寫訊號安裝函式,在該函式內部能判斷接受到的是什麼訊號,並把訊號打印出來。
#include <stdio.h>
#include <signal.h>
#include <sys/time.h>

void signalHandler(int signo)
{
    switch (signo)
       {                          
        case SIGALRM:           //通過比較判斷接受的是什麼訊號
            printf("Caught the SIGALRM signal!\n");
            break;
        case SIGVTALRM:
            printf("Caught the SIGVTALRM signal!\n");
            break;
        case SIGPROF:
            printf("Caught the SIGPROF signal!\n");
            break;
       }
}

int main(int argc, char *argv[])
{
    signal(SIGALRM, signalHandler);         //第一個訊號安裝函式
    signal(SIGVTALRM, signalHandler);      //第二個訊號安裝函式
    signal(SIGPROF, signalHandler);         //第三個訊號安裝函式
    struct itimerval new_value;
    new_value.it_value.tv_sec = 1;     //程式執行開始一秒後傳送這個訊號
    new_value.it_value.tv_usec = 0;
    new_value.it_interval.tv_sec = 2;  //以後每隔兩秒傳送這個訊號
    new_value.it_interval.tv_usec = 0;
    setitimer(ITIMER_REAL, &new_value, NULL);     //第一個訊號傳送函式
    setitimer(ITIMER_VIRTUAL, &new_value, NULL);   //第二個訊號傳送函式
    setitimer(ITIMER_PROF, &new_value, NULL);  //第三個訊號安傳送函式
    while(1);
    return 0;
}

/*

這個程式執行後會一起打印出來三個訊號,因為設定的三個訊號的傳送時間是一樣的,你們如果用的話可以把每個訊號傳送函式封裝成一個函式,然後在函式裡面設定不同的訊號傳送時間

*/