2011-07-29 26 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