process! (Capistrano::Command)

    # File lib/capistrano/command.rb, line 162
        def process!
          elapsed = Benchmark.realtime do
            loop do
              break unless process_iteration { @channels.any? { |ch| !ch[:closed] } }
            end
          end

          logger.trace "command finished in #{(elapsed * 1000).round}ms" if logger

          if (failed = @channels.select { |ch| ch[:status] != 0 }).any?
            commands = failed.inject({}) { |map, ch| (map[ch[:command]] ||= []) << ch[:server]; map }
            message = commands.map { |command, list| "#{command.inspect} on #{list.join(',')}" }.join("; ")
            error = CommandError.new("failed: #{message}")
            error.hosts = commands.values.flatten
            raise error
          end

          self
        end