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;
}

/*

这个程序执行后会一起打印出来三个信号,因为设置的三个信号的发送时间是一样的,你们如果用的话可以把每个信号发送函数封装成一个函数,然后在函数里面设置不同的信号发送时间

*/

猜你喜欢

转载自blog.csdn.net/qq_40663274/article/details/83926404