簡単なプロセス間通信(Ruby)

Thread と IO.pipe を使ってみます。

read, write = IO.pipe

Thread.new do
  while (a = read.gets) != "end\n"
    print a
  end
end

5.times do
  write.puts "send!"
  sleep(rand(3) + 1) 
end
write.puts "end"

write.close
read .close

結果。適度にスリープしながら "send!" を 5回表示する。

 

require 'bundler/setup'
require 'gtk2'

read, write = IO.pipe

fork do
  w = Gtk::Window.new
  w.signal_connect("destroy") {Gtk.main_quit}
  w.set_size_request(200, 100)
  
  Gtk.idle_add do
    puts read.gets
    read.close
    Gtk.main_quit
  end
  
  w.show_all
  Gtk.main
end

sleep(3)

write.puts "test!"
write.close