如果我們使用sigaction來定義信號處理程序,那麼爲什麼我們不需要重置處理程序?如果我們使用signal(sig_no,handler_func)
那麼我們必須重置它。爲什麼是這樣?sigaction - 爲什麼我們不需要重置處理程序?
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
void func(int sig)
{
printf("caught signal:%d\n",sig);
// Not needed to reset handler. Why?
}
int main()
{
struct sigaction sa;
sa.sa_handler=(void*)func;
sigaction(SIGRTMIN,&sa,NULL);
kill(0,SIGRTMIN);
kill(0,SIGRTMIN);
kill(0,SIGRTMIN);
}
Output:
[[email protected] signals]# ./a.out
caught signal:34
caught signal:34
caught signal:34 (3 times signal caught by same handler without resetting handler)
謝謝,非常好,信息豐富。 – kingsmasher1 2011-03-13 17:36:22