Class: PerfectQueue::ExecRunner

Inherits:
Object
  • Object
show all
Defined in:
lib/perfectqueue/engine.rb

Instance Method Summary collapse

Constructor Details

#initialize(cmd, task) ⇒ ExecRunner

Returns a new instance of ExecRunner.



117
118
119
120
121
122
123
# File 'lib/perfectqueue/engine.rb', line 117

def initialize(cmd, task)
  @cmd = cmd
  @task = task
  @iobuf = ''
  @pid = nil
  @kill_signal = :TERM
end

Instance Method Details

#killObject



144
145
146
147
# File 'lib/perfectqueue/engine.rb', line 144

def kill
  Process.kill(@kill_signal, @pid)
  @kill_signal = :KILL
end

#runObject



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/perfectqueue/engine.rb', line 125

def run
  cmdline = "#{@cmd} #{Shellwords.escape(@task.id)}"
  IO.popen(cmdline, "r+") {|io|
    @pid = io.pid
    io.write(@task.data) rescue nil
    io.close_write
    begin
      while true
        io.sysread(1024, @iobuf)
        print @iobuf
      end
    rescue EOFError
    end
  }
  if $?.to_i != 0
    raise "Command failed"
  end
end