在某些重复之后停止信号所需的程序

时间:2011-07-29 11:00:07

标签: c

任何人都可以提供帮助,以便在某些重复后停止信号。下面是示例代码。 我希望在重复3次后,信号应该停止。但目前它还没有停止:

    #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 个答案:

答案 0 :(得分:0)

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

包含相应的标题:

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

另外,为什么要尝试在退出函数中设置信号处理程序?它没有意义。