@@ -146,13 +146,15 @@ def _call(self, filename, *args, **kwargs):
146146 ret = self .cli .process .returncode
147147 if ret != 0 :
148148 logger .error ('Mafft returned non-zero exit status: {}' .format (ret ))
149- logger .error ('Output of Mafft:\n \n %s\n stdout=\n %s\n {} \n \n %s\n stderr=\n %s\n {} \n \n ' ,
149+ logger .error ('Output of Mafft:\n \n %s\n stdout=\n %s\n %s \n \n %s\n stderr=\n %s\n %s \n \n ' ,
150150 "=" * 30 , "=" * 30 , summarize_long_message (self .cli .get_stdout ()),
151151 "=" * 30 , "=" * 30 , summarize_long_message (self .cli .get_stderr ()))
152152 if ret < 0 :
153153 sig = - ret
154154 raise WrapperError (f'Mafft was terminated by signal { sig } ' , exit_code = 128 + sig )
155155 else :
156+ if ret == 1 and (was_oom_killed () or "Killed" in self .cli .get_stderr ()):
157+ raise WrapperError (f'Mafft was killed by the kernel due to running out of memory' , exit_code = 137 )
156158 raise WrapperError (f'Mafft exited with code { ret } ' , exit_code = ret )
157159 return self .cli .get_stdout (), self .cli .get_stderr ()
158160
@@ -348,3 +350,17 @@ def get_default_options():
348350 StringOption ('--merge' , '' , active = False ),
349351 IntegerOption ('--thread' , - 1 , active = False ),
350352 ])
353+
354+
355+ def was_oom_killed ():
356+ """
357+ Check if the process was killed by the kernel due to running out of memory.
358+ """
359+ try :
360+ with open ("/sys/fs/cgroup/memory.events" ) as f :
361+ for line in f :
362+ if line .startswith ("oom_kill" ):
363+ return int (line .split ()[1 ]) > 0
364+ except FileNotFoundError :
365+ return False
366+ return False
0 commit comments