[ruby-list:48978] Re: シグナルを保留する方法

From: Tomoyuki Chikanaga <nagachika00@...>
Date: 2012-10-05 00:46:45 UTC
List: ruby-list #48978
近永と申します。

> 自前でキューをつくるしかないんじゃないかな
今の Signal.trap は再入し得るので確かその中で Queue に push できなかったような気がします。

queue = Queue.new

Signal.trap(:INT) do
  queue.push(:int)
end

while ev = queue.pop
  ...
end

と書くと trap のブロックの queue.push で Mutex#lock した状態でさらにシグナルを受け取って再入すると
Mutex#lock に失敗するので……みたいな。

以上です。

2012年10月5日 2:03 KOSAKI Motohiro <kosaki.motohiro@gmail.com>:
>> さとうふみやす @ OSSTech です。
>>
>> Ruby で、ある処理中にシグナルをブロック(保留。無視ではない)
>> したいことがあるのですが、C でいう sigprocmask(2), sigpending(2) を
>> 利用したシグナル保留処理に相当することを書く方法はないものでしょうか。
>
> 自前でキューをつくるしかないんじゃないかな
>

In This Thread