6

開発中の Linux ディストリビューション用のシステム クリティカルなプログラムを作成しています。クラッシュを回避するために、特定の信号を受信したら、それ自体を再起動する必要があります。問題は、再起動後にその信号を再度有効にできないことです。つまり、信号を 2 回受信することはできません。自分自身を execv() した後、新しいプロセスがシグナルをセットアップするために signal() を呼び出すと、SIG_DFL が返されます。毎回。2 回続けて呼び出しても、そもそも設定されていないことを示しています。元のプロセスから引き継がれている奇妙なフラグはありますか?

4

2 に答える 2

1

execはアドレス空間全体を上書きするため、シグナル ハンドラーは継承execされず、リセットされないシグナル ハンドラーは間違った場所を指します。リセットされないのは、たとえば に設定されている場合のみですSIG_IGN。これは、前処理のアドレス空間に依存しませんexec

于 2009-06-21T14:28:50.967 に答える