1

すべてのシグナルをブロックすることを除いて、ここで説明されているように、アプリケーションにシグナル フィルターを設定します。

sigfillset (&signalSet);

そして、公開ドキュメントにも /usr/include/bits/signum.h にも記載されていない奇妙なシグナル #36 を受け取ります。しかし、このシグナルはメイン スレッドの sem_wait() に影響し、ブロックされていないようです。私はそのような例外をキャッチします:

::sem_wait() が失敗しました。コード: 4 (システム コールの中断)

Red Hat 4.1.2-44 (gcc バージョン 4.1.2 20080704) を使用しています。

4

1 に答える 1

3

これは POSIX リアルタイム シグナルです。これらは、SIGRTMIN+1 から SIGRTMAX の範囲にあります (/usr/include/bits/signum.h にあります)。

詳細については、man 7 シグナルの「リアルタイム シグナル」セクションを参照してください。

すべての信号をブロックする場合

sigfillset(&signalset); sigprocmask(SIG_BLOCK,&signalset,NULL);

また

sigfillset(&signalset); pthread_sigmask(SIG_BLOCK,&signalset,NULL); それでもシグナル36を取得します。シグナルを使用しているライブラリ関数も使用していると思います。

「strace」を使用して、シグナル関数が呼び出されるかどうか、いつ呼び出されるかを確認できます。

于 2013-01-17T14:07:17.527 に答える