У меня есть процесс Python, который порождает 5 других процессов Python, используя модуль многопроцессорности. Назовем родительский процесс P0, а остальные P1-P5. Требование состоит в том, что если мы отправим SIGTERM на P0, он должен сначала закрыть P1 на P5, а затем выйти сам.
Подвох в том, что P1 и P5 ждут на семафорах. Поэтому, когда я посылаю SIGTERM этим процессам, они вызывают обработчик сигнала и завершают работу. Но так как они ожидают на семафоре, они выдают исключение. Есть ли способ поймать это исключение перед выходом, чтобы P0-P5 мог сделать изящный выход?
Проследить:
Traceback (most recent call last):
File "/usr/lib64/python2.7/multiprocessing/process.py", line 258, in _bootstrap
Traceback (most recent call last):
Process Process-2:
File "/usr/lib64/python2.7/multiprocessing/process.py", line 258, in _bootstrap
Traceback (most recent call last):
self.run()
File "/usr/lib64/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
Process Process-5:
Traceback (most recent call last):
File "/usr/lib64/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib64/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "/opt/fireeye/scripts/mip/StaticAnalysisRunner.py", line 45, in run
qsem.acquire()