やっぱり、ね。

| HOME | 現在のログ | 注意事項 | 過去ログ | 文字検索 | 管理モード |

[538] signal ( 2008/04/04(Fri) 09:14:58  )

せったー
意外と書いてないので...FAQ?

sigqueue() でシグナルを送信したときに妙な動き、
# SIGUSR1 シグナルが1つしか保留されないといったもの。
ちょっと、調べてみたので、参考まで。

まず、これに関して、この動きは正しい。というか、仕様。
なぜなら、この、SIGUSR1 というのは、"POSIX signal" であるということ。
POSIX signal は、1つのプロセスが signalハンドラにいて、シグナルをブロックしている場合、同じシグナルは、1つだけが保留されるということになっているらしい。

------------------------------------------------------------------------------------
では、どうすれば良いのか。

POSIX realtime signal を使う。
POSIX realtime signal は、シグナルをプロセスのシグナルキュー?にため込むので、そのような制限は無くなっている。
で、どの様に使うのか。

簡単。
単に、シグナル番号に、SIGRTMIN 以上、SIGRTMAX 未満の番号を使うだけ。

ただ、SIGRTMIN (多分 32) は、システム依存なうえに、
bits/signum.h 内で、関数(__libc_current_sigrtmin ())
を指すマクロとして定義されているので、switch 文 の case で使えないよね。

この件に関しては、多分、経過措置であろう マクロ __SIGRTMIN を使うことで回避できる。
たとえば、
#define SIG_NANDAKANA (__SIGRTMIN + 5)
や、
#define SIG_HOGEHOGE (__SIGRTMAX - 5)

[戻る]

このフォームから返信してください  ( *の項目は必ず入力してください )
*お名前:
*タイトル:
E-mail:
URL:
*本文:
アイコン:
文字色:
パスワード:  (このパスワードで記事を削除できます)
| HOME | 現在のログ | 注意事項 | 過去ログ | 文字検索 | 管理モード |