code: def kill_all_processes(self, check_alive=True, allow_graceful=False):
          
          # Kill the raylet first. This is important for suppressing errors at
          # shutdown because we give the raylet a chance to exit gracefully and
          # clean up its child worker processes. If we were to kill the plasma
          # store (or Redis) first, that could cause the raylet to exit
          # ungracefully, leading to more verbose output from the workers.
          if ray_constants.PROCESS_TYPE_RAYLET in self.all_processes:
              self._kill_process_type(
                  ray_constants.PROCESS_TYPE_RAYLET,
                  check_alive=check_alive,
                  allow_graceful=allow_graceful)
  
          # We call "list" to copy the keys because we are modifying the
          # dictionary while iterating over it.
          for process_type in list(self.all_processes.keys()):
              self._kill_process_type(
                  process_type,
                  check_alive=check_alive,
                  allow_graceful=allow_graceful)
docs: Kill all of the processes.
  
          Note that This is slower than necessary because it calls kill, wait,
          kill, wait, ... instead of kill, kill, ..., wait, wait, ...
  
          Args:
              check_alive (bool): Raise an exception if any of the processes were
                  already dead.