# File lib/skynet/skynet_manager.rb, line 180
    def worker_shutdown
      if not @masters_dead
        workers_to_kill = active_workers.select do |w|
          w.map_or_reduce == "master" and active_workers.detect{|status| status.process_id == w.process_id and worker_alive?(w.process_id)}
        end
        warn "Shutting down masters.  #{worker_pids.size} workers still running." if worker_pids.size > 0

        worker_pids_to_kill = workers_to_kill.collect { |w| w.process_id }
        if worker_pids_to_kill and not worker_pids_to_kill.empty?
          warn "FOUND MORE RUNNING MASTERS WE HAVEN'T KILLED:", worker_pids_to_kill
          remove_worker(worker_pids_to_kill)
        end

        if not active_workers.detect { |w| w.map_or_reduce == "master" }
          signal_workers("TERM")
          @masters_dead = true
        else
          return check_number_of_workers
        end
      end
      if worker_pids.size < 1
        info "No more workers running."
      else
        warn "Shutting down.  #{worker_pids.size} workers still running." if worker_pids.size > 0
      end
    end