python マルチプロセスでプロセスの終了を検出する

やりたいこと

各プロセスに永続する処理を実行させた際に、1つでも例外で終了したら他すべてのプロセスを終了させ、プログラム全体を終了させたい。

コード

import multiprocessing
import time

def worker(n):
    while True:
        time.sleep(n)
        if n==2:
            raise Exception("error")

if __name__ == '__main__':
    processes = []
    # 3つのプロセスを起動
    p1 = multiprocessing.Process(target=worker, args=(1,))
    p2 = multiprocessing.Process(target=worker, args=(2,))
    p3 = multiprocessing.Process(target=worker, args=(3,))
    p1.start()
    p2.start()
    p3.start()
    processes.append(p1)
    processes.append(p2)
    processes.append(p3)

    # どれかのプロセスが終了するまで待機
    while all([p.is_alive() for p in processes]):
        time.sleep(1)
        continue
    # すべてのプロセスを終了させる
    for p in processes:
        p.terminate()
        p.join()

出力 2秒後に例外が発生し、プログラム全体終了します。

Process Process-2:
Traceback (most recent call last):
  File "/usr/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap
    self.run()
  File "/usr/lib/python3.8/multiprocessing/process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wood_stock/work/tmp/multi_prosecc_exc.py", line 8, in worker
    raise Exception("error")
Exception: error