[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/

In This Thread

Prev Next