def soft_close
      while (! @read_fh.closed?)
        read_proc
      end
      @read_fh.close unless (@read_fh.closed?)
      @write_fh.close unless (@write_fh.closed?)
      if (@child_pid)
        Process.wait(@child_pid)
        return $?
      end
      return true
    end
def soft_close
      while (! @read_fh.closed?)
        read_proc
      end
      @read_fh.close unless (@read_fh.closed?)
      @write_fh.close unless (@write_fh.closed?)
      if (@child_pid)
        Process.wait(@child_pid)
        return $?
      end
      return true
    end
Wait for the process to complete or the read handle to be closed
 and then clean everything up.  This method call will block until
 the spawned process or connected filehandle/socket is closed