diff --git a/README.md b/README.md
index 9d84f59..4336da3 100644
--- a/README.md
+++ b/README.md
@@ -174,7 +174,6 @@ See also `man journalctl`.
## Known problems
- Awful documentation
-- Current version is broken, use nohang v0.1!
- regex matching need fixes
## Feedback
@@ -188,6 +187,7 @@ Please create [issues](https://github.com/hakavlad/nohang/issues). Use cases, fe
- add `oom-trigger`
- fix regex matching: replace re.fullmatch() by re.search()
- add suppot `cmdline` regex matching
+ - add colored output
- improve output: display `cmdline` and `Uid` in corrective action reports
- [v0.1](https://github.com/hakavlad/nohang/releases/tag/v0.1), 2018-11-23
diff --git a/nohang b/nohang
index 9b110cb..4bc9277 100755
--- a/nohang
+++ b/nohang
@@ -6,11 +6,8 @@ from operator import itemgetter
from time import sleep, time
from argparse import ArgumentParser
from sys import stdout
-
-
import re
-vm_rss = 9
sig_dict = {signal.SIGKILL: 'SIGKILL',
signal.SIGTERM: 'SIGTERM'}
@@ -129,7 +126,7 @@ def conf_parse_bool(param):
def func_decrease_oom_score_adj(oom_score_adj_max):
"""
- Stupid function, must be removed or remaked
+ Stupid function, must be remaked
"""
for i in os.listdir('/proc'):
if i.isdigit() is not True:
@@ -293,7 +290,7 @@ def send_notify(signal, name, pid):
title = 'Preventing OOM'
body = '{} process {}, {}'.format(
notify_sig_dict[signal], pid, name.replace(
- # & может ломать уведомления в некоторых темах оформления notify-send, поэтому заменяется на *
+ # сивол & может ломать уведомления в некоторых темах оформления, поэтому заменяется на *
'&', '*'))
if root:
# send notification to all active users with notify-send
@@ -371,6 +368,8 @@ def find_victim_and_send_signal(signal):
# not implemented, in progress
prefer_re_cmdline = ''
+ avoid_re_cmdline = ''
+ prefer_cmd_factor = 1
prefer_cmd_factor = 1
@@ -388,7 +387,8 @@ def find_victim_and_send_signal(signal):
name = pid_to_name(pid)
cmdline = pid_to_cmdline(pid)
- # отсеять потоки ядра
+
+ # skip kthreads
if cmdline == '':
continue
@@ -419,10 +419,6 @@ def find_victim_and_send_signal(signal):
-
-
-
-
else:
for pid in os.listdir('/proc'):
@@ -469,10 +465,6 @@ def find_victim_and_send_signal(signal):
except FileNotFoundError:
pass
-
-
- # исключение - значит вообще не надо бить этот процесс. Или искать новый, или принт: процесс хуёвый, стоп!
-
except ProcessLookupError:
pass
except IndexError:
@@ -485,7 +477,7 @@ def find_victim_and_send_signal(signal):
exit_status = os.system(etc_dict[name])
response_time = time() - time0
- etc_info = ''' Found the victim with highest badness:\n Name: {}\n Pid: {}\n Uid: {}\n Badness: {}\n VmRSS: {} MiB\n VmSwap: {} MiB\n Execute the command: {}\n Exit status: {}; response time: {} ms'''.format(name, pid, uid, victim_badness, vm_rss, vm_swap, command, exit_status, round(response_time * 1000))
+ etc_info = ''' Found the victim with highest badness:\n Name: \033[33m{}\033[0m\n PID: \033[33m{}\033[0m\n UID: \033[33m{}\033[0m\n Badness: \033[33m{}\033[0m\n VmRSS: \033[33m{}\033[0m MiB\n VmSwap: \033[33m{}\033[0m MiB\n CmdLine: \033[33m{}\033[0m\n Execute the command: \033[4m{}\033[0m\n Exit status: {}; response time: {} ms'''.format(name, pid, uid, victim_badness, vm_rss, vm_swap, cmdline, command, exit_status, round(response_time * 1000))
print(mem_info)
print(etc_info)
@@ -496,7 +488,7 @@ def find_victim_and_send_signal(signal):
try:
os.kill(int(pid), signal)
response_time = time() - time0
- send_result = 'OK; response time: {} ms'.format(
+ send_result = '\033[32mOK\033[0m; response time: {} ms'.format(
round(response_time * 1000))
if gui_notifications:
@@ -511,7 +503,7 @@ def find_victim_and_send_signal(signal):
send_result = 'no such process; response time: {} ms'.format(
round(response_time * 1000))
- preventing_oom_message = ' Found the process with highest badness:\n Name: {}\n Pid: {}\n Uid: {}\n Badness: {}\n VmRSS: {} MiB\n VmSwap: {} MiB\n Cmdline: {}\n Sending {} to the victim; {}'.format(
+ preventing_oom_message = ' Found the process with highest badness:\n Name: \033[33m{}\033[0m\n PID: \033[33m{}\033[0m\n UID: \033[33m{}\033[0m\n Badness: \033[33m{}\033[0m\n VmRSS: \033[33m{}\033[0m MiB\n VmSwap: \033[33m{}\033[0m MiB\n CmdLine: \033[33m{}\033[0m\n Sending \033[4m{}\033[0m to the victim; {}'.format(
name, pid, uid, victim_badness, vm_rss, vm_swap, cmdline, sig_dict[signal], send_result)
print(mem_info)
print(preventing_oom_message)
@@ -1367,7 +1359,7 @@ while True:
if mem_available <= mem_min_sigkill_kb and swap_free <= swap_min_sigkill_kb:
time0 = time()
- mem_info = 'Low memory; corrective action required!\n MemAvailable [{} MiB, {} %] <= mem_min_sigkill [{} MiB, {} %]\n Swa' \
+ mem_info = '\033[4mLow memory; corrective action required!\033[0m\n MemAvailable [{} MiB, {} %] <= mem_min_sigkill [{} MiB, {} %]\n Swa' \
'pFree [{} MiB, {} %] <= swap_min_sigkill [{} MiB, {} %]'.format(
kib_to_mib(mem_available),
percent(mem_available / mem_total),
@@ -1387,7 +1379,7 @@ while True:
elif mem_used_zram >= zram_max_sigkill_kb:
time0 = time()
- mem_info = 'Low memory; corrective action required!\n MemUsedZram [{} MiB, {} %] >= zram_max_sigkill [{} MiB, {} %]'.format(
+ mem_info = '\033[4mLow memory; corrective action required!\033[0m\n MemUsedZram [{} MiB, {} %] >= zram_max_sigkill [{} MiB, {} %]'.format(
kib_to_mib(mem_used_zram),
percent(mem_used_zram / mem_total),
kib_to_mib(zram_max_sigkill_kb),
@@ -1400,7 +1392,7 @@ while True:
time0 = time()
- mem_info = 'Low memory; corrective action required!\n MemAvailable [{} MiB, {} %] <= mem_min_sigterm [{} MiB, {} %]\n Sw' \
+ mem_info = '\033[4mLow memory; corrective action required!\033[0m\n MemAvailable [{} MiB, {} %] <= mem_min_sigterm [{} MiB, {} %]\n Sw' \
'apFree [{} MiB, {} %] <= swap_min_sigterm [{} MiB, {} %]'.format(
kib_to_mib(mem_available),
percent(mem_available / mem_total),
@@ -1425,7 +1417,7 @@ while True:
elif mem_used_zram >= zram_max_sigterm_kb:
time0 = time()
- mem_info = 'Low memory; corrective action required!\n MemUsedZram [{} MiB, {} %] >= zram_max_sigter' \
+ mem_info = '\033[4mLow memory; corrective action required!\033[0m\n MemUsedZram [{} MiB, {} %] >= zram_max_sigter' \
'm [{} M, {} %]'.format(
kib_to_mib(mem_used_zram),
percent(mem_used_zram / mem_total),
diff --git a/nohang.conf b/nohang.conf
index 2febe4b..0a802aa 100644
--- a/nohang.conf
+++ b/nohang.conf
@@ -132,7 +132,7 @@ oom_score_adj_max = 30
Valid values are True and False.
-regex_matching = True
+regex_matching = False
Badness of processes whose names correspond to prefer_regex will
be calculated by the following formula: