我的C语言程序未响应SIGSTOP-可能会覆盖SIGINT?

时间:2018-10-21 14:29:21

标签: c bash signals windows-subsystem-for-linux

在这种情况下,为什么SIGSTOP对我不起作用?请记住,我使用的是Windows 10的Ubuntu bash shell,而不是常规的gcc。编辑器为VI。 所有其他“正常”信号都可以正常工作,除了我无法通过SIGSTOP使其停止。我构造了一个setPause()函数,然后使用带有SIGINT的sigset暂停程序。看看。

    #define _XOPEN_SOURCE 500
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <signal.h>
    #include <unistd.h>
    #include <sys/time.h>

    int isPrime (unsigned long n);
    void periodPrint();
    void setPause();
    void stop();
    static unsigned int last=1000000001;
    static int pausing=0;
    static unsigned int number=1000000001;
    int main (void){
    struct itimerval t; 
    sigset(SIGTERM, stop);
    sigset(SIGINT, setPause);
    sigset(SIGALRM, periodPrint);
    t.it_value.tv_sec=5;
    t.it_value.tv_usec=0;
    t.it_interval.tv_sec=5;
    t.it_interval.tv_usec=0;
    setitimer(ITIMER_REAL, &t, NULL);
    while (1){
      if (isPrime(number)) last=number;
      number++;
      while (pausing){ 
        pause();
      }
    }
    return 0;
    }

    int isPrime (unsigned long n){
    unsigned long i, max;
    if ((n&1)==0) return 0; 
    max = sqrt(n);
    for (i=3;i<=max;i+=2){
      if ((n%i)==0) return 0;
    }
    return 1;
    }

    void periodPrint(){
      if(pausing) return;
      printf("last prime number = %u\n", last);
    }

    void setPause(){
      pausing=1-pausing;
    }

    void stop(){
     printf("last prime number = %u\n", last);
     exit(64);
    }

因此,该程序每5秒钟打印一个大于最后一个的新质数。 SIGINT用于暂停它,SIGTERM终止它,SIGSTOP应该在这里工作。 Here is how it looks like in the Bash.在克罗地亚语中,“ zadnji prosti broj”意为“最后素数”。为什么会这样?

0 个答案:

没有答案