2015-10-19 99 views
0

我創建了信號。其中一人打印「1」20次。另一個打印「2」20次。我希望這些信號依次打印他們的數字:1,2,1,2 ...但程序只打印「1」。有人可以幫我解決這個問題嗎?如何發送信號?

+0

那麼,你的循環和你的信號處理程序之間有什麼聯繫? – Kotshi

+1

我的意思是,你使用sigset來設置你什麼都不做的信號處理程序,然後你使用main函數中的printf()。這些與你正在捕捉的信號無關...... – Kotshi

+0

sigset()將函數定義爲信號處理函數。在使用'sigset(SIGTERM,handler)之後;'發送給你程序的每個SIGTERM將執行'handler()'而不是殺死你的程序。 – Kotshi

回答

2

運行此代碼並查看將SIGUSR1或SIGUSR2發送到打印的PID時的內容。

#include <stdio.h> 
#include <signal.h> 

void handler1(int signal) 
{ 
    printf("Foo\n"); 
} 

void handler2(int signal) 
{ 
    printf("Bar\n"); 
} 

int main() 
{ 
    printf("PID: %d\n", getpid()); 
    sigset(SIGUSR1,handler1); 
    sigset(SIGUSR2,handler2); 
    while (1); 
    return(0); 
} 
+0

@Dean是的,谷歌會告訴你數以百計的方式來做到這一點。 – Kotshi

+0

當然它處於一個無限循環中,('while(1);')。我的意思是:「嘗試從另一個終端發送信號」 – Kotshi

+0

只要你想殺死程序,就使用** ctrl + c **。 – Kotshi