我正在写一个程序,每5秒发送一个信号(警报)给自己。我也希望如果用户键入被忽略的终端“kill -ALRM PID”。如果我理解的信号来电,我的程序应该这样做,但是,当我使用该命令从终端proram认为这是它的一个警报和犯规忽略它C编程 - 为什么这个信号不被忽略?
int s = 0;
void alarm_func(int s) {
s = s + 10;
char buff[256];
sprintf(buff, "ALARM pid=%d, %d seconds, getpid(), s);
write(1, buff, strlen(buff));
}
int main(int argc, char* argv[]) {
int k = 1; //just a different value from 0
if (k == 0) signal(SIGALRM, alarm_func);
else signal(SIGALRM, SIG_IGN); //this should ignore the terminal-created alarm (?)
while (s<100) {
k = alarm(10);
pause();
}
exit(1);
}
非常感谢
编辑:我的prgram应该每10秒发送一次信号给自己100秒,即10次。但是,我也希望如果我试图从终端向程序发送一个信号(kill -ALRM'pid'),那个信号会被忽略。这就是为什么我使用变量k:如果我从终端发送信号,k将不同于0(因为来自警报(10)的10个secons没有完全发生),所以信号将被忽略(信号(SIGALRM,SIG_IGN ))。
这就是我所理解的信号的使用,开始意识到我知道几乎为零
对不起,所有发送的潜在歧义
k未初始化,可能不等于零。 – 2014-09-28 11:57:43
未初始化的'k'上的'if'分支有什么意义?那和'signal'有关呢? – mafso 2014-09-28 12:02:14
如果我理解正确,如果全部时间已经转换,则alarm()返回0,否则(当终端发生时)返回剩余时间量。我尝试初始化k = 1,但它也没有工作。 – Ruben 2014-09-28 12:04:12