2011-07-29 25 views
1

任何人都可以提供帮助,以在某些重复后停止信号。下面是示例代码。 我想,经过3次重复的信号应该stopped.But目前它没有停止:在某些重复后停止信号所需的程序

#include <stdio.h> 
#include <signal.h> 
#include <sys/time.h> 
#include <errno.h> 
#define INTERVAL 1 
int g=0; 
int howmany = 0; 

void exit_func (int i) 
{ 
    signal(SIGTERM,exit_func); 
    printf("\nBye Bye!!!\n"); 
    exit(0); 
} 
void alarm_wakeup (int i) 
{ 
    struct itimerval tout_val; 

    g++; 
printf("\n %d \n",g); 
// signal(SIGALRM,alarm_wakeup); 

if(g==3) 
{ 
printf("\n %d \n",g); 
signal(SIGSTOP,exit_func); 
printf("%s",strerror(errno)); 
} 
    howmany += INTERVAL; 

    printf("\n%d sec up partner, Wakeup!!!\n",howmany); 
    tout_val.it_interval.tv_sec = 0; 
    tout_val.it_interval.tv_usec = 0; 
    tout_val.it_value.tv_sec = INTERVAL; /* 10 seconds timer */ 
    tout_val.it_value.tv_usec = 0; 

    setitimer(ITIMER_REAL, &tout_val,0); 
} 


int main() 
{ 
    struct itimerval tout_val; 

    tout_val.it_interval.tv_sec = 0; 
    tout_val.it_interval.tv_usec = 0; 
    tout_val.it_value.tv_sec = INTERVAL; /* 10 seconds timer */ 
    tout_val.it_value.tv_usec = 0; 
    setitimer(ITIMER_REAL, &tout_val,0); 

    signal(SIGALRM,alarm_wakeup); /* set the Alarm signal capture */ 
    signal(SIGINT,exit_func); 

    while (1) 
    { 
//printf("Dd"); 
} 
} 
+1

你不能捕获SIGSTOP –

回答

0

不要抬起SIGSTOP,直接调用exit_func。

包括相应的头:

#include <stdlib.h> //exit 
#include <string.h> //strerror 

也,为什么你试图建立一个信号处理程序在你的退出功能?它没有任何意义。

+0

我认为调用exit_func会终止主程序,但我不希望发生这种情况,考虑一个案例,主程序有一个无限的while循环,所以调用exit_func将终止程序 – sumant