编写程序完成以下功能:
调用setitimer函数分别触发SIGALRM信号,SIGVTALRM信号,SIGPROF信号 ;(可以由多进程分别触发每个信号)
编写信号安装函数,在该函数内部能判断接受到的是什么信号,并把信号打印出来。
setitimer函数的作用是提供精确的定时功能。通过改变settitime函数的第一个参数就能够改变函数触发的信号。
程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/time.h>
#include <unistd.h>
#include <sys/types.h>
void fun(int sig)
{
if(sig == SIGALRM)
printf("Received the SIGALRM!\n");
else if(sig == SIGVTALRM)
printf("Receive the SIGVTALRM!\n");
else if(sig == SIGPROF)
printf("Receive the SIGPROf!\n");
}
int main()
{
if(signal(SIGALRM,fun) < 0)
perror("signal");
if(signal(SIGVTALRM,fun) < 0)
perror("signal");
if(signal(SIGPROF,fun) < 0)
perror("signal");
struct itimerval new_value1,new_value2,new_value3;
new_value1.it_value.tv_sec = 1;
new_value1.it_value.tv_usec = 0;
new_value1.it_interval.tv_sec = 2;
new_value1.it_interval.tv_usec = 0;
setitimer(ITIMER_REAL,&new_value1,NULL);
new_value2.it_value.tv_sec = 1;
new_value2.it_value.tv_usec = 0;
new_value2.it_interval.tv_sec = 2;
new_value2.it_interval.tv_usec = 0;
setitimer(ITIMER_VIRTUAL,&new_value2,NULL);
new_value3.it_value.tv_sec = 1;
new_value3.it_value.tv_usec = 0;
new_value3.it_interval.tv_sec = 2;
new_value3.it_interval.tv_usec = 0;
setitimer(ITIMER_PROF,&new_value3,NULL);
while(1);
return 0;
}
程序运行结果: