# File lib/nanoc/cli/error_handler.rb, line 53
    def handle_while(&block)
      # Set exit handler
      [ 'INT', 'TERM' ].each do |signal|
        Signal.trap(signal) do
          puts
          exit!(0)
        end
      end
      begin
        Signal.trap('USR1') do
          puts "Caught USR1; dumping a stack trace"
          puts caller.map { |i| "  #{i}" }.join("\n")
        end
      rescue ArgumentError
      end

      # Run
      yield
    rescue Nanoc::Errors::GenericTrivial => e
      $stderr.puts "Error: #{e.message}"
      exit(1)
    rescue Interrupt => e
      exit(1)
    rescue StandardError, ScriptError => e
      self.print_error(e)
      exit(1)
    end