SIGSEGV およびその他のシグナルに sigwait() を使用してから、何かを実行しようとしています (タイムスタンプをファイルに書き込むなど)。次に、信号がまったくキャッチされなかったかのようにプログラムが動作するようにします (たとえば、システムがコアダンプ用に構成されていると仮定すると、SIGSEGV が発生するとコアダンプが生成されます)。
いくつかのマンページを読みましたが、そうする明白な方法がわかりません。
なにか提案を?
前もって感謝します!
プログラムをクラッシュさせないシグナルハンドラーを登録できます。シグナルを受信したら、シグナルハンドラーに入り、シグナルハンドラーを実行した後(ファイルへの書き込み)、中断したところからプログラムに戻ります。
コア ダンプが必要な場合は、Linux の core(5) コマンドを使用すると、プロセスを終了せずにシグナル ハンドラにコア ダンプが作成されます。
http://www.alexonlinux.com/signal-handling-in-linux#signal_masks
たとえば、いくつかの信号を希望どおりに処理できないと思います
SIGKILL
SIGSEGV
マニュアル自体が述べているように、シグナル SIGKILL および SIGSTOP をキャッチまたは無視することはできません 。以下のリンクを確認してください。
SIGNAL(7)およびSIGNAL(2) これらのリンクは、Linux でのシグナル処理に関する十分な詳細を提供するはずです。
ただし、以下のコマンドを使用できるLinuxなどのオペレーティングシステムでシグナルをリストするために、シグナルハンドラーを登録して他のいくつかのシグナルを処理することができます
kill -l
コア ダンプの生成がオペレーティング システムによって生成されると見なされる限り、詳細についてはここをクリックしてください。
ここでサンプルコードを確認してください