进程间通信之信号的安装与发送
- 调用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;
}
/*
这个程序执行后会一起打印出来三个信号,因为设置的三个信号的发送时间是一样的,你们如果用的话可以把每个信号发送函数封装成一个函数,然后在函数里面设置不同的信号发送时间
*/