我正在寫一個程序,每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