[ruby-list:48976] シグナルを保留する方法
From:
SATOH Fumiyasu <fumiyas@...>
Date:
2012-10-04 11:59:29 UTC
List:
ruby-list #48976
さとうふみやす @ OSSTech です。
Ruby で、ある処理中にシグナルをブロック(保留。無視ではない)
したいことがあるのですが、C でいう sigprocmask(2), sigpending(2) を
利用したシグナル保留処理に相当することを書く方法はないものでしょうか。
http://www.gnu.org/software/libc/manual/html_node/Checking-for-Pending-Signals.html
こんな感じに Signal.block (仮名) みたいのがあるとよさそうなのですが。
require 'thread'
require 'zmq'
require 'json'
q = Queue.new
zmq_ctx = ZMQ::Context.new(1)
zmq_in = zmq_ctx.socket(ZMQ::UPSTREAM)
zmq_in.bind('tcp://127.0.0.1:9999')
consumer = Thread.new do
loop do
msg = q.pop
...
end
end
loop do
recv_sigs = Signal.block('TERM', 'INT') do
msg_json = zmq_in.recv(zmq_recv_flags)
msg = JSON.parse(msg_json)
q.push(msg)
end
...
end
--
-- Name: SATOH Fumiyasu (fumiyas @ osstech co jp)
-- Business Home: http://www.OSSTech.co.jp/
-- GitHub Home: https://GitHub.com/fumiyas/