2014-11-20 129 views
0

我有一个问题。我正在为这样的信号定义我自己的处理程序。发送USR2信号后忽略信号处理程序

sig_11.sa_handler = &signal1_SIGILL; 
    sig_11.sa_flags=SA_NODEFER; 
    if (sigaction(SIGUSR2, &sig_12, NULL) < 0) { 
     perror ("sigaction");    
     return 1; 
    } 

我正在为不同的信号创建这样的处理程序。但这并不重要。
在我发送USR2信号之前,一切看起来都很好,并且工作得很好。看起来,这使得进程忽略所有其他信号。它不会终止进程,而是忽略所有其他信号。
这是正常行为吗?

回答

0

你没有初始化sa_mask和你没有告诉我们如何创建sig_11变量,也没有什么是在处理程序中完成的,但我怀疑一个坏值在sa_mask设定,所以至少在处理过程中运行一些信号可能会被阻塞。通常在处理程序结束时,事情将恢复正常。可以使用至少SIGKILL,因为它不能被阻挡或捕获。