diff --git a/README.md b/README.md index 253488f..f6da26a 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,10 @@ Also look at [Why are low memory conditions handled so badly?](https://www.reddi The tools listed above may work at the same time on one computer. +### See also + +- `memlockd` - daemon to lock files in memory with mlock. It is used to lock system programs and config files in memory so that if a DOS attack is experienced then the chance of the sys-admin regaining control of the system in a reasonable amount of time (and therefore having a reasonable chance of discovering the cause of the problem) is significantly increased. + ## Some features - Sending the SIGTERM signal is default corrective action. If the victim does not respond to SIGTERM, with a further drop in the level of memory it gets SIGKILL. diff --git a/nohang b/nohang index 1318954..29b2758 100755 --- a/nohang +++ b/nohang @@ -50,6 +50,13 @@ HR = '' victim_dict = dict() + +extra_process_table_info = None + + + + + ########################################################################## # define functions @@ -124,11 +131,11 @@ def update_stat_dict_and_print(key): if print_total_stat: - stats_msg = '{}\nWhat happened in the last {}:'.format( + stats_msg = '{}\nTotal stat (what happened in the last {}):'.format( HR, format_time(time() - start_time)) for i in stat_dict: - stats_msg += '\n- {}: {}'.format(i, stat_dict[i]) + stats_msg += '\n {}: {}'.format(i, stat_dict[i]) print(stats_msg) @@ -395,6 +402,18 @@ def pid_to_cmdline(pid): return f.read().replace('\x00', ' ').rstrip() + +def pid_to_realpath(pid): + try: + return os.path.realpath('/proc/' + pid + '/exe') + except FileNotFoundError: + return '' + + + + + + def pid_to_uid(pid): '''return euid''' try: @@ -661,7 +680,9 @@ def find_victim(): str(badness).rjust(7), pid_to_name(pid).ljust(15), pid_to_uid(pid).rjust(10), - pid_to_cmdline(pid)) + pid_to_cmdline(pid) + # pid_to_realpath(pid) + ) ) pid_badness_list.append((pid, badness)) @@ -974,7 +995,7 @@ def implement_corrective_action(signal): round(response_time * 1000)) preventing_oom_message = '\nImplement a corrective action:' \ - '\n Send {} to the victim; {}'.format( + '\n Send {} to the victim; {}'.format( sig_dict[signal], send_result) key = 'Send {} to {}'.format(