2011-12-06 124 views
0

我已成功将处理函数附加到SIG_INT和SIG_KILL,但现在我希望能够在某个点(在fork之后精确地)“解除”处理程序。这是我如何附加处理程序:取消绑定sigaction处理程序

struct sigaction sa; 
sa.sa_handler = interrupt_handler; 
sigempty(&sa.sa_mask); 
sa.sa_flags = SA_SIGINFO; 

sigaction(SIG_INT, &sa, NULL); 
sigaction(SIG_KILL, &sa, NULL); 

interrupt_handler只打印一些东西。

+1

你不能“抓住”一个SIGKILL信号。它会一直终止程序。 – Milan

+1

@Milan:Doug McIlroy可以抓到SIGKILL。 http://www.cs.dartmouth.edu/~sinclair/doug/ – ninjalj

+0

@米兰非常感谢你的支持,无论如何也不需要它来捕杀。 – zeebonk

回答

4

你可能想恢复到以前的配置:

struct sigaction sa, oldsa; 

/* Change it but save previous state. */ 
sigaction(SIG_INT, &sa, &oldsa); 

/* ... */ 

/* Restore previous stuff. */ 
sigaction(SIG_INT, &oldsa, NULL); 
+0

谢谢,@cnicutar!正是我在找什么! – zeebonk