Class: PerfectQueue::Multiprocess::ChildProcess

Inherits:
ThreadProcessor show all
Defined in:
lib/perfectqueue/multiprocess/child_process.rb

Constant Summary collapse

HEARTBEAT_PACKET =
[0].pack('C')

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ThreadProcessor

#restart

Constructor Details

#initialize(runner, config, wpipe) ⇒ ChildProcess

Returns a new instance of ChildProcess.



27
28
29
30
31
32
# File 'lib/perfectqueue/multiprocess/child_process.rb', line 27

def initialize(runner, config, wpipe)
  @wpipe = wpipe
  @wpipe.sync = true
  super(runner, config)
  @sig = install_signal_handlers
end

Class Method Details

.run(runner, config, wpipe) ⇒ Object



23
24
25
# File 'lib/perfectqueue/multiprocess/child_process.rb', line 23

def self.run(runner, config, wpipe)
  new(runner, config, wpipe).run
end

Instance Method Details

#child_heartbeatObject



58
59
60
61
62
63
64
65
# File 'lib/perfectqueue/multiprocess/child_process.rb', line 58

def child_heartbeat
  @wpipe.write HEARTBEAT_PACKET
rescue
  @log.error "Parent process unexpectedly died. Exiting worker pid=#{Process.pid}: #{$!}"
  stop(true)
  Process.kill(:KILL, Process.pid)
  exit! 137
end

#joinObject

override



45
46
47
# File 'lib/perfectqueue/multiprocess/child_process.rb', line 45

def join
  # do nothing
end

#keepaliveObject

override



50
51
52
# File 'lib/perfectqueue/multiprocess/child_process.rb', line 50

def keepalive
  # do nothing
end

#logrotatedObject



54
55
56
# File 'lib/perfectqueue/multiprocess/child_process.rb', line 54

def logrotated
  @log.reopen!
end

#runObject



34
35
36
37
# File 'lib/perfectqueue/multiprocess/child_process.rb', line 34

def run
  super
  @sig.shutdown
end

#stop(immediate) ⇒ Object



39
40
41
42
# File 'lib/perfectqueue/multiprocess/child_process.rb', line 39

def stop(immediate)
  @log.info "Exiting worker pid=#{Process.pid}"
  super
end