私が使う:
signal(SIGINT, CtrlHandler);
SIGINT
イベントのハンドラーを追加します。しかし、どうすればこのハンドラーを削除できますか?
私が使う:
signal(SIGINT, CtrlHandler);
SIGINT
イベントのハンドラーを追加します。しかし、どうすればこのハンドラーを削除できますか?
これがあなたがすることです:
signal(SIGINT, SIG_DFL);
これにより、シグナルハンドラーは、そのシグナルのデフォルトの動作(設定されていない場合のデフォルトの処理を含む)にリセットされます。SIGINTの場合、コアダンプなしでプロセスを中止します。
のマニュアルでsignal
は、これが機能する理由を説明しています。
signal(signum, handler)
シグナルの処理signum
を、、、またはプログラマー定義関数(「シグナルハンドラー」)のアドレスのhandler
いずれかSIG_IGN
に設定します。SIG_DFL
...処理がに設定されている場合SIG_DFL
、シグナルに関連付けられたデフォルトのアクションが発生します。
この情報は、man
コマンドを使用して見つけることもできます。コマンドラインで入力man signal
して読み通すと、表示されるはずです。
これは、システムのデフォルトのシグナルハンドラーを置き換えた場合に非常に固有です。状況によっては、最初にそこにあったハンドラーを単純に復元する必要があります。その定義を見ると、signal
次のようになります。
sighandler_t signal(int signum, sighandler_t handler);
したがって、を返しますsighandler_t
。それsighandler_t
が返すものは、信号の以前の「性質」を表します。したがって、これを処理する別の方法は、返される値を保存し、独自のハンドラーを削除するときにその値を復元することです。