2015-11-29 79 views
1

我在作業上。SIGALRM處理程序不起作用

作業正在Linux系統(Ubuntu上)上製作虛擬實時操作系統。

我的問題是SIGALRM,它是調度程序的處理程序。

void scheduler(int signo) { 
     /*variables */ 
     printf("Scheduler awake!!\n"); 
     /* Do 
      Schedule */ 
} 

int RunScheduler(void) { 
     signal(SIGALRM, scheduler); 
     alarm(1); 
     while(1) 
       pause(); 
     return 0; 
} 

int main() { 
     RunScheduler(); 
} 

函數調度程序(處理程序)不起作用。警報(1)正常工作,但僅在警報(1)後暫停。

是否有任何理由信號處理程序不起作用?

回答

0

非常相同的代碼在我的機器上正常工作。

我已經使用了與Ubuntu捆綁在一起的gcc編譯器。你使用相同的編譯器嗎?

+0

Yeap,使用與Ubuntu的gcc – Answer

+0

我認爲循環內的暫停可能會導致行爲的變化。嘗試在沒有停頓的情況下運行代碼(因爲您無論在無限循環內)。如果這不起作用,請使用sigaction而不是signal。 –

+0

謝謝你的建議。我會盡力。 – Answer

相關問題