Linux高階程式設計基礎——程序間通訊之訊號的安裝與傳送
阿新 • • 發佈:2018-12-20
程序間通訊之訊號的安裝與傳送
- 呼叫setitimer函式分別觸發SIGALRM訊號,SIGVTALRM訊號,SIGPROF訊號 ;(可以由多程序分別觸發每個訊號)
- 編寫訊號安裝函式,在該函式內部能判斷接受到的是什麼訊號,並把訊號打印出來。
#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; }
/*
這個程式執行後會一起打印出來三個訊號,因為設定的三個訊號的傳送時間是一樣的,你們如果用的話可以把每個訊號傳送函式封裝成一個函式,然後在函式裡面設定不同的訊號傳送時間
*/