def METHOD_NAME(self):  # pylint: disable=too-many-branches,too-many-locals,too-many-statements
    """
    Execute hang analysis.
    1. Get a list of interesting processes
    2. Dump useful information or take core dumps
    """
    self._setup_logging()
    self._log_system_info()
    dumpers = dumper.get_dumpers()
    processes = process_list.get_processes(self.process_ids, self.interesting_processes,
                                           self.options.process_match, self.root_logger)
    max_dump_size_bytes = int(self.options.max_core_dumps_size) * 1024 * 1024
    # Dump python processes by signalling them. The resmoke.py process will generate
    # the report.json, when signalled, so we do this before attaching to other processes.
    for pinfo in [pinfo for pinfo in processes if pinfo.name.startswith("python")]:
        process.signal_python(self.root_logger, pinfo)
    trapped_exceptions = []
    # Dump all processes, except python & java.
    for pinfo in [pinfo for pinfo in processes if not re.match("^(java|python)", pinfo.name)]:
        process_logger = self._get_process_logger(pinfo)
        try:
            dumpers.dbg.dump_info(
                self.root_logger, process_logger, pinfo, self.options.dump_core
                and _check_dump_quota(max_dump_size_bytes, dumpers.dbg.get_dump_ext()))
        except Exception as err:  # pylint: disable=broad-except
            self.root_logger.info("Error encountered when invoking debugger %s", err)
            trapped_exceptions.append(traceback.format_exc())
    # Signal go processes to ensure they print out stack traces, and die on POSIX OSes.
    # On Windows, this will simply kill the process since python emulates SIGABRT as
    # TerminateProcess.
    # Note: The stacktrace output may be captured elsewhere (i.e. resmoke).
    for pinfo in [pinfo for pinfo in processes if pinfo.name in self.go_processes]:
        self.root_logger.info("Sending signal SIGABRT to go process %s with PID %d", pinfo.name,
                              pinfo.pid)
        process.signal_process(self.root_logger, pinfo.pid, signal.SIGABRT)
    self.root_logger.info("Done analyzing all processes for hangs")
    for exception in trapped_exceptions:
        self.root_logger.info(exception)
    if trapped_exceptions:
        raise RuntimeError(
            "Exceptions were thrown while dumping. There may still be some valid dumps.")