2011-12-06 1 views
0

私はSIG_INTとSIG_KILLにハンドラ関数を正常にアタッチしましたが、今度は特定のポイント(正確にはフォークの後)でハンドラを "バインド解除"できるようにしたいと思います。これは、ハンドラを添付する方法です。バインドされた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

@ミラン:Doug McIlroyがSIGKILLを捕まえることができます。 http://www.cs.dartmouth.edu/~sinclair/doug/ – ninjalj

+0

@Milanは頭をアップしてくれてありがとう、とにかくそれを殺すのに本当に必要なかった。 – 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

関連する問題