$base = Time.now

def log(label, msg)
  printf "%7.3f %-10s: %p\n", Time.now - $base, label, msg
end

log 'main', 'started'

IO.popen("cat -n", "r+") do |io|
  th = Thread.new do
    io.each_line do |line|
      log 'reader', line
    end
  end

  log 'writer', 'about to write first line'
  io.puts "first line"
  sleep 1
  log 'writer', 'about to write second line'
  io.puts "second line"
  sleep 5
  log 'writer', 'about to write last line'
  io.puts "last line"
  io.close_write
  log 'writer', 'closed'

  th.join
  log 'writer', 'joined'
end

log 'main', 'finished'

