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]