0

別のプログラムを開始するために fork() と execvp() を使用するライブラリを作成しています。私が理解しているように、execvX() は「カスタム」シグナル ハンドラを SIG_DFL にリセットしますが、無視されたシグナル ハンドラを SIG_DFL に設定しません。

これはライブラリであり、ユーザーがシグナルで何をするかを制御できないことを念頭に置いてください。無視されたシグナルのシグナル ハンドラを SIG_DFL に設定することをお勧めしますか?

もしそうなら、すべてのシグナルハンドラを一度に SIG_DFL に設定する方法はありますか? 代わりに、すべてのシグナル番号を反復処理する必要がありますか? この場合、最後の可能なシグナル番号を見つけるにはどうすればよいでしょうか? bits/signum.h に _NSIG があることを確認しました。これは POSIX の一定の部分ですか、それとも Linux 固有ですか?

ありがとう。

4

1 に答える 1

1

execve(2)のマニュアルページによると、

キャッチされているシグナルの処理は、デフォルトにリセットされます ( signal(7) )。

signal(7)man ページには次のように追加されています。

の間、execve(2)処理されたシグナルの処理はデフォルトにリセットされます。無視されたシグナルの処理は変更されません。

そのため、無視するシグナルまたはデフォルトにするシグナルを 1 つずつリセットする必要があります。execve

そして、私はNSIG定数を見ます/usr/include/signal.h

于 2012-08-22T13:01:43.220 に答える