Module: Cognizant::Process::Children
- Included in:
- Cognizant::Process
- Defined in:
- lib/cognizant/process/children.rb
Instance Method Summary collapse
Instance Method Details
#create_child_process(child_pid) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/cognizant/process/children.rb', line 23 def create_child_process(child_pid) name = "<child(pid:#{child_pid})>" attributes = @child_process_attributes.merge({ name: name, autostart: false }) # We do not have control over child process' lifecycle, so avoid even attempting to maintain its state with autostart. child = Cognizant::Process.new(nil, attributes, &@child_process_block) child.instance_variable_set(:@application, @application) # TODO: Reset pidfile? child.write_pid(child_pid) @children << child child.monitor end |
#refresh_children! ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/cognizant/process/children.rb', line 4 def refresh_children! # First prune the list of dead children. @children.delete_if do |child| !child.process_running? end # Add new found children to the list. new_children_pids = Cognizant::System.get_children(@process_pid) - @children.map(&:cached_pid) unless new_children_pids.empty? Log[self].info "Existing children: #{@children.collect{ |c| c.cached_pid }.join(",")}. Got new children: #{new_children_pids.inspect} for #{@process_pid}." end # Construct a new process wrapper for each new found children. new_children_pids.each do |child_pid| create_child_process(child_pid) end end |