File tree 2 files changed +22
-9
lines changed
src/_ert/forward_model_runner
tests/ert/unit_tests/forward_model_runner
2 files changed +22
-9
lines changed Original file line number Diff line number Diff line change @@ -144,11 +144,6 @@ def _stop_reporters(
144
144
reporter .stop (exited_event = exited_event )
145
145
146
146
147
- def sigterm_handler (_signo , _stack_frame ):
148
- signal .signal (signal .SIGTERM , signal .SIG_DFL )
149
- os .kill (0 , signal .SIGTERM )
150
-
151
-
152
147
def fm_dispatch (args ):
153
148
parser = argparse .ArgumentParser (
154
149
description = (
@@ -207,13 +202,14 @@ def sigterm_handler(_signo, _stack_frame):
207
202
208
203
def main ():
209
204
os .nice (19 )
210
- signal .signal (signal .SIGTERM , sigterm_handler )
211
205
try :
212
206
fm_dispatch (sys .argv )
213
- except Exception as e :
207
+ except Exception as exc :
208
+ print (f"fm_dispatch failed with { exc = } " )
214
209
pgid = os .getpgid (os .getpid ())
215
- os .killpg (pgid , signal .SIGTERM )
216
- raise e
210
+ os .killpg (
211
+ pgid , signal .SIGTERM
212
+ ) # This will trigger the sigterm_handler, which shuts down the reporters and SIGKILLS any remaining processes.
217
213
218
214
219
215
if __name__ == "__main__" :
Original file line number Diff line number Diff line change @@ -484,3 +484,20 @@ async def wait_for_msg(msg_type):
484
484
event_from_json (zmq_server .messages [- 1 ]).error_msg
485
485
== FORWARD_MODEL_TERMINATED_MSG
486
486
)
487
+
488
+
489
+ async def test_fm_dispatch_main_signals_sigterm_on_exception (capsys ):
490
+ def mock_fm_dispatch_raises (* args ):
491
+ raise RuntimeError ("forward model critical error" )
492
+
493
+ with (
494
+ patch ("_ert.forward_model_runner.fm_dispatch.os.killpg" ) as mock_killpg ,
495
+ patch ("_ert.forward_model_runner.fm_dispatch.os.getpgid" ) as mock_getpgid ,
496
+ patch ("_ert.forward_model_runner.fm_dispatch.fm_dispatch" ) as mock_fm_dispatch ,
497
+ ):
498
+ mock_getpgid .return_value = 17
499
+ mock_fm_dispatch .side_effect = mock_fm_dispatch_raises
500
+ _ert .forward_model_runner .fm_dispatch .main ()
501
+ assert "forward model critical error" in capsys .readouterr ().out
502
+
503
+ mock_killpg .assert_called_with (17 , signal .SIGTERM )
You can’t perform that action at this time.
0 commit comments