Skip to content

Instantly share code, notes, and snippets.

@lanrion
Forked from kwilczynski/em-test.rb
Created January 28, 2013 06:21
Show Gist options
  • Save lanrion/4653427 to your computer and use it in GitHub Desktop.
Save lanrion/4653427 to your computer and use it in GitHub Desktop.
require 'rubygems'
require 'eventmachine'
children = []
Signal.trap('SIGINT') do
EventMachine.next_tick { EventMachine.stop_event_loop }
end
Signal.trap('EXIT') do
puts "Killing #{children.size} children ..."
children.each do |pid|
Process.kill('SIGUSR1', pid) rescue Exception
end
end
EventMachine.epoll if EventMachine.epoll?
channel = EventMachine::Channel.new
EventMachine.run do
puts "Father PID: #{Process.pid}"
channel.subscribe {|m| puts "\t#{m}" }
EventMachine.add_periodic_timer(1) do
puts "Father(#{Process.pid}): #{Time.now.to_s}"
end
4.times do |i|
pid = EventMachine.fork_reactor do
Signal.trap('SIGUSR1') { EventMachine.stop_event_loop }
Signal.trap('SIGCHLD') {}
Signal.trap('EXIT') {}
EventMachine.add_periodic_timer(5) do
channel.push "Child[#{i}](#{Process.pid}): #{Time.now.to_s}"
end
end
children << pid
puts "Child[#{i}] PID: #{pid}"
Process.detach(pid)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment