# File lib/chef/expander/cluster_supervisor.rb, line 102
      def maintain_workers
        while @running
          sleep 1
          workers_to_replace = {}
          @workers.each do |process_id, worker_params|
            if result = Process.waitpid2(process_id, Process::WNOHANG)
              log.error { "worker #{worker_params[:index]} (PID: #{process_id}) died with status #{result[1].exitstatus || '(no status)'}"}
              workers_to_replace[process_id] = worker_params
            end
          end
          workers_to_replace.each do |dead_pid, worker_params|
            @workers.delete(dead_pid)
            start_worker(worker_params[:index])
          end
        end

        @workers.each do |pid, worker_params|
          log.info { "Stopping worker #{worker_params[:index]} (PID: #{pid})"}
          Process.kill(@kill, pid)
        end
        @workers.each do |pid, worker_params|
          Process.waitpid2(pid)
        end

      end