import multiprocessing import os import signal import time def main_conds(ctx): def wait(cond): with cond: cond.wait() exit_cond = ctx.Condition() waiters = [] for i in range(2): waiters.append(ctx.Process(target=wait, args=(exit_cond,), daemon=True)) waiters[i].start() time.sleep(1) os.kill(waiters[0].pid, signal.SIGTERM) print("Notifying waiter cond.") with exit_cond: exit_cond.notify_all() print("Cond notified - joining waiters") for w in waiters: w.join() print("Waiters joined.") if __name__ == '__main__': import faulthandler faulthandler.dump_traceback_later(3, exit=True) multiprocessing.set_start_method("fork") main_conds(multiprocessing)