在这种情况下,为什么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”意为“最后素数”。为什么会这样?