# File lib/open4.rb, line 124
  def self.propagate_exception(cid, ps_read)
    e = Marshal.load ps_read
    raise Exception === e ? e : "unknown failure!"
  rescue EOFError
    # Child process did not raise exception.

  rescue
    # Child process raised exception; wait it in order to avoid a zombie.

    Process.waitpid2 cid
    raise
  ensure
    ps_read.close
  end