code: def check_and_del_zombie_workers(self):
          for p in active_children():
              logger.debug("got child: %s", p)
          w_to_del = []
          for worker in list(self.workers.values()):
              logger.debug("checking if worker %s (pid=%d) is alive",
                           worker.get_id(), worker.get_pid())
              if not self.interrupted and not worker.is_alive():
                  logger.warning("The worker %s (pid=%d) went down unexpectedly!",
                                 worker.get_id(), worker.get_pid())
                  worker.terminate()
                  worker.join(timeout=1)
                  w_to_del.append(worker.get_id())
          for worker_id in w_to_del:
              worker = self.workers[worker_id]
              del self.q_by_mod[worker.module_name][worker.get_id()]
              for scheduler_uuid in self.schedulers:
                  sched = self.schedulers[scheduler_uuid]
                  for act in list(sched.actions.values()):
                      if act.status == ACT_STATUS_QUEUED and act.my_worker == worker_id:
                          self.assign_to_a_queue(act)
              del self.workers[worker_id]