diff --git a/nohang b/nohang
index bf94569..744018e 100755
--- a/nohang
+++ b/nohang
@@ -41,7 +41,6 @@ print_total_stat = True
stop_cont = False
-print_states_debug = False
@@ -50,9 +49,6 @@ print_states_debug = False
# define functions
-def pid_to_oom_score(pid):
- with open('/proc/' + pid + '/oom_score') as f:
- return f.read().rstrip()
def pid_to_state(pid):
@@ -69,10 +65,7 @@ def stop():
if pid[0].isdecimal() is False or pid is '1' or pid == self_pid:
continue
try:
- # print(pid)
- #oom_score_r = int(pid_to_oom_score(pid))
oom_score_r = int(rline1('/proc/' + pid + '/oom_score'))
- #print([oom_score_r])
if oom_score_r > 9:
uid_r = pid_to_uid(pid)
#print('PID: {}, State: {}, oom_score {}'.format(pid, pid_to_state(pid), oom_score_r))
@@ -107,36 +100,6 @@ def cont(stopped_list):
t2 = time()
print('All cont time: ', t2 - t1)
-def print_states():
- if print_states_debug:
- print()
- t1 = time()
- print('non-S states:')
- for pid in os.listdir('/proc'):
- # only directories whose names consist only of numbers, except /proc/1/
- if pid[0].isdecimal() is False or pid is '1' or pid == self_pid:
- continue
- try:
- s = pid_to_state(pid)
- if s == 'S':
- continue
- else:
- print('State: {}, [{}], {}, {}...'.format(
- s, pid, pid_to_name(pid), pid_to_cmdline(pid)[:40]))
- except FileNotFoundError:
- continue
- except ProcessLookupError:
- continue
- t2 = time()
- print('print state time:', t2 - t1)
- print()
-
-
-
-
-
-
-
@@ -424,6 +387,10 @@ def send_notify_warn():
Look for process with maximum 'badness' and warn user with notification.
(implement Low memory warnings)
"""
+
+ if stop_cont:
+ stopped_list = stop()
+
# find process with max badness
fat_tuple = fattest()
pid = fat_tuple[0]
@@ -443,8 +410,8 @@ def send_notify_warn():
round(mem_available / mem_total * 100))
title = 'Low memory: {}'.format(low_mem_percent)
- body = 'Fattest process: {}, {}'.format(
- pid, name.replace(
+ body = 'Next victim is {}'.format(
+ name.replace(
# symbol '&' can break notifications in some themes,
# therefore it is replaced by '*'
'&', '*'))
@@ -456,6 +423,9 @@ def send_notify_warn():
# send notification to user that runs this nohang
notify_send_wait(title, body)
+ if stop_cont:
+ cont(stopped_list)
+
def send_notify(signal, name, pid):
"""
@@ -466,8 +436,8 @@ def send_notify(signal, name, pid):
pid: str process pid
"""
title = 'Preventing OOM'
- body = '{} process {}, {}'.format(
- notify_sig_dict[signal], pid, name.replace(
+ body = '{} process {}'.format(
+ notify_sig_dict[signal], name.replace(
# symbol '&' can break notifications in some themes,
# therefore it is replaced by '*'
'&', '*'))
@@ -507,7 +477,7 @@ def sleep_after_send_signal(signal):
if signal is SIGKILL:
if print_sleep_periods:
print(' sleep', min_delay_after_sigkill)
- sleep(min_delay_after_sigterm)
+ sleep(min_delay_after_sigkill)
else:
if print_sleep_periods:
print(' sleep', min_delay_after_sigterm)
@@ -518,6 +488,8 @@ def fattest():
"""
Find the process with highest badness and its badness adjustment
Return pid and badness
+
+ -> find_mem_hog() or find_victim()
"""
pid_badness_list = []
@@ -573,7 +545,8 @@ def fattest():
pid_tuple_list = sorted(
pid_badness_list,
key=itemgetter(1),
- reverse=True)[0]
+ reverse=True
+ )[0]
pid = pid_tuple_list[0]
@@ -586,11 +559,12 @@ def fattest():
def find_victim_and_send_signal(signal):
"""
Find victim with highest badness and send SIGTERM/SIGKILL
+
+ -> implement_corrective_action()
"""
if stop_cont:
- print_states()
stopped_list = stop()
@@ -866,14 +840,8 @@ def find_victim_and_send_signal(signal):
update_stat_dict_and_print(key)
-
if stop_cont:
- print_states()
cont(stopped_list)
- print_states()
-
-
-
sleep_after_send_signal(signal)