When generating API stubs with the scaffold utility using, e.g., `python -m localstack.aws.scaffold sns`,
the scaffold creates method names from operation names, which are ugly when acronyms (subsequent uppercase characters that belong together).

Example:
`CreateSMSSandboxPhoneNumber` -> `create_s_m_s_sandbox_phone_number`

it would be nicer to have `create_sms_sandbox_phone_number`

This is a limitation of this method: https://github.com/localstack/localstack/blob/1888e66b85d7e6a8ee457bc7a732984fcf7aa830/localstack/utils/common.py#L978-L979
pass
    LOG.debug("[shutdown] Done cleaning up threads / processes / tasks")
    
    TMP_THREADS.clear()
    TMP_PROCESSES.clear()
def kill_process_tree(parent_pid):
    
    import psutil
    parent_pid = getattr(parent_pid, "pid", None) or parent_pid
    parent = psutil.Process(parent_pid)
    for child in parent.children(recursive=True):
        try:
            child.kill()
        except Exception:
            pass
    parent.kill()
def items_equivalent(list1, list2, comparator):
    """Returns whether two lists are equivalent (i.e., same items contained in both lists,
    irrespective of the items' order) with respect to a comparator function."""
    def contained(item):
        for _item in list2:
            if comparator(item, _item):
                return True
    if len(list1) != len(list2):
        return False
    for item in list1:
        if not contained(item):
            return False
    return True
def cleanup_tmp_files():