diff --git a/nohang b/nohang index e4f5335..0661521 100755 --- a/nohang +++ b/nohang @@ -9,6 +9,7 @@ from sys import stdout, stderr, argv, exit from re import search from sre_constants import error as invalid_re from signal import signal, SIGKILL, SIGTERM, SIGINT, SIGQUIT, SIGHUP +from threading import Thread ########################################################################## @@ -291,6 +292,7 @@ def signal_handler_inner(signum, frame): def exe(cmd): """ """ + log('Execute the command: {}'.format(cmd)) t0 = time() write_self_oom_score_adj(self_oom_score_adj_max) @@ -301,6 +303,21 @@ def exe(cmd): return err + +def go (func, *a): + """ run func in new thread + """ + t1 = time() + try: + Thread(target=func, args=a).start() + except RuntimeError: + print('RuntimeError: cannot spawn a new thread') + t2 = time() + log('New thread spawned in {} ms'.format( + round((t2 - t1) * 1000, 1) + )) + + def write(path, string): """ """ @@ -1071,7 +1088,7 @@ def send_notification(title, body): title, encoder(body)) - exe(cmd) + go(exe, cmd) def get_pid_list(): @@ -1933,7 +1950,7 @@ def implement_corrective_action( cmd = command.replace('$PID', pid).replace('$NAME', pid_to_name( pid)).replace('$SERVICE', service) - exit_status = exe(cmd) + go(exe, cmd) """ if exit_status == 0: @@ -1946,6 +1963,8 @@ def implement_corrective_action( response_time = time() - time0 + exit_status = None + preventing_oom_message = 'Implement a corrective act' \ 'ion:\n Run the command: {}' \ '\n Exit status: {}; total response ' \ @@ -2084,7 +2103,7 @@ def implement_corrective_action( log('Execute post_kill_exe') - exe(cmd) + go(exe, cmd) if post_action_gui_notifications: if soft_match: