fix GUI warns
This commit is contained in:
parent
e21e88e045
commit
bf0ea46729
102
nohang
102
nohang
@ -20,7 +20,7 @@ if self_uid == 0:
|
|||||||
else:
|
else:
|
||||||
root = False
|
root = False
|
||||||
|
|
||||||
wait_time = 12
|
wait_time = 3
|
||||||
|
|
||||||
# todo: make config option
|
# todo: make config option
|
||||||
max_sleep_time = 2
|
max_sleep_time = 2
|
||||||
@ -41,6 +41,14 @@ print_total_stat = True
|
|||||||
|
|
||||||
|
|
||||||
stop_cont = False
|
stop_cont = False
|
||||||
|
stop_cont_warn = False
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# print(os.path.realpath('/proc/29758/exe'))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -347,6 +355,30 @@ def pid_to_cmdline(pid):
|
|||||||
return f.read().replace('\x00', ' ').rstrip()
|
return f.read().replace('\x00', ' ').rstrip()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def pid_to_environ(pid):
|
||||||
|
"""
|
||||||
|
Get process cmdline by pid.
|
||||||
|
|
||||||
|
pid: str pid of required process
|
||||||
|
returns string cmdline
|
||||||
|
"""
|
||||||
|
with open('/proc/' + pid + '/environ') as f:
|
||||||
|
return f.read().replace('\x00', '\n').rstrip()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def pid_to_uid(pid):
|
def pid_to_uid(pid):
|
||||||
'''return euid'''
|
'''return euid'''
|
||||||
try:
|
try:
|
||||||
@ -388,7 +420,7 @@ def send_notify_warn():
|
|||||||
(implement Low memory warnings)
|
(implement Low memory warnings)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if stop_cont:
|
if stop_cont_warn:
|
||||||
stopped_list = stop()
|
stopped_list = stop()
|
||||||
|
|
||||||
# find process with max badness
|
# find process with max badness
|
||||||
@ -409,12 +441,16 @@ def send_notify_warn():
|
|||||||
low_mem_percent = '{}%'.format(
|
low_mem_percent = '{}%'.format(
|
||||||
round(mem_available / mem_total * 100))
|
round(mem_available / mem_total * 100))
|
||||||
|
|
||||||
title = 'Low memory: {}'.format(low_mem_percent)
|
# title = 'Low memory: {}'.format(low_mem_percent)
|
||||||
body = 'Next victim is <b>{}</b>'.format(
|
title = 'Low memory'
|
||||||
|
|
||||||
|
body = 'Hog: <b>{}</b> [{}]'.format(
|
||||||
name.replace(
|
name.replace(
|
||||||
# symbol '&' can break notifications in some themes,
|
# symbol '&' can break notifications in some themes,
|
||||||
# therefore it is replaced by '*'
|
# therefore it is replaced by '*'
|
||||||
'&', '*'))
|
'&', '*'),
|
||||||
|
pid
|
||||||
|
)
|
||||||
|
|
||||||
if root: # If nohang was started by root
|
if root: # If nohang was started by root
|
||||||
# send notification to all active users with special script
|
# send notification to all active users with special script
|
||||||
@ -423,7 +459,7 @@ def send_notify_warn():
|
|||||||
# send notification to user that runs this nohang
|
# send notification to user that runs this nohang
|
||||||
notify_send_wait(title, body)
|
notify_send_wait(title, body)
|
||||||
|
|
||||||
if stop_cont:
|
if stop_cont_warn:
|
||||||
cont(stopped_list)
|
cont(stopped_list)
|
||||||
|
|
||||||
|
|
||||||
@ -435,12 +471,15 @@ def send_notify(signal, name, pid):
|
|||||||
name: str process name
|
name: str process name
|
||||||
pid: str process pid
|
pid: str process pid
|
||||||
"""
|
"""
|
||||||
title = 'Preventing OOM'
|
title = 'Hang prevention'
|
||||||
body = '<b>{}</b> process <b>{}</b>'.format(
|
body = '<b>{} {}</b> [{}]'.format(
|
||||||
notify_sig_dict[signal], name.replace(
|
notify_sig_dict[signal],
|
||||||
|
name.replace(
|
||||||
# symbol '&' can break notifications in some themes,
|
# symbol '&' can break notifications in some themes,
|
||||||
# therefore it is replaced by '*'
|
# therefore it is replaced by '*'
|
||||||
'&', '*'))
|
'&', '*'),
|
||||||
|
pid
|
||||||
|
)
|
||||||
if root:
|
if root:
|
||||||
# send notification to all active users with notify-send
|
# send notification to all active users with notify-send
|
||||||
notify_helper(title, body)
|
notify_helper(title, body)
|
||||||
@ -457,9 +496,12 @@ def send_notify_etc(pid, name, command):
|
|||||||
name: str process name
|
name: str process name
|
||||||
pid: str process pid
|
pid: str process pid
|
||||||
"""
|
"""
|
||||||
title = 'Preventing OOM'
|
title = 'Hang prevention'
|
||||||
body = 'Victim is process <b>{}</b>, <b>{}</b>\nExecute the command:\n<b>{}</b>'.format(
|
body = 'Victim is process <b>{}</b> [{}]\nExecute the command:\n<b>{}</b>'.format(
|
||||||
pid, name.replace('&', '*'), command.replace('&', '*'))
|
name.replace('&', '*'),
|
||||||
|
pid,
|
||||||
|
command.replace('&', '*')
|
||||||
|
)
|
||||||
if root:
|
if root:
|
||||||
# send notification to all active users with notify-send
|
# send notification to all active users with notify-send
|
||||||
notify_helper(title, body)
|
notify_helper(title, body)
|
||||||
@ -499,8 +541,17 @@ def fattest():
|
|||||||
if pid[0].isdecimal() is False or pid is '1' or pid == self_pid:
|
if pid[0].isdecimal() is False or pid is '1' or pid == self_pid:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# find and modify badness (if it needs)
|
# find and modify badness (if it needs)
|
||||||
try:
|
try:
|
||||||
|
|
||||||
|
|
||||||
|
#realpath = os.path.realpath('/proc/' + pid + '/exe')
|
||||||
|
#print(pid, pid_to_name(pid), realpath)
|
||||||
|
|
||||||
|
|
||||||
badness = int(rline1('/proc/' + pid + '/oom_score'))
|
badness = int(rline1('/proc/' + pid + '/oom_score'))
|
||||||
|
|
||||||
if decrease_oom_score_adj:
|
if decrease_oom_score_adj:
|
||||||
@ -641,10 +692,18 @@ def find_victim_and_send_signal(signal):
|
|||||||
with open('/proc/' + pid + '/status', 'rb') as f:
|
with open('/proc/' + pid + '/status', 'rb') as f:
|
||||||
f_list = f.read().decode('utf-8', 'ignore').split('\n')
|
f_list = f.read().decode('utf-8', 'ignore').split('\n')
|
||||||
|
|
||||||
|
for i in range(len(f_list)):
|
||||||
|
if i is ppid_index:
|
||||||
|
ppid = f_list[i].split('\t')[2]
|
||||||
|
|
||||||
|
|
||||||
for i in range(len(f_list)):
|
for i in range(len(f_list)):
|
||||||
if i is uid_index:
|
if i is uid_index:
|
||||||
uid = f_list[i].split('\t')[2]
|
uid = f_list[i].split('\t')[2]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if i is vm_size_index:
|
if i is vm_size_index:
|
||||||
vm_size = kib_to_mib(
|
vm_size = kib_to_mib(
|
||||||
int(f_list[i].split('\t')[1][:-3]))
|
int(f_list[i].split('\t')[1][:-3]))
|
||||||
@ -692,11 +751,14 @@ def find_victim_and_send_signal(signal):
|
|||||||
len_vm = len(str(vm_size))
|
len_vm = len(str(vm_size))
|
||||||
|
|
||||||
if detailed_rss:
|
if detailed_rss:
|
||||||
|
|
||||||
|
environ = pid_to_environ(pid)
|
||||||
|
|
||||||
victim_info = '\033[4mFound a process with highest badness:\033[0m' \
|
victim_info = '\033[4mFound a process with highest badness:\033[0m' \
|
||||||
'\n Name: \033[33m{}\033[0m' \
|
'\n Name: \033[33m{}\033[0m' \
|
||||||
'\n PID: \033[33m{}\033[0m' \
|
'\n PID: \033[33m{}\033[0m' \
|
||||||
'\n UID: \033[33m{}\033[0m' \
|
'\n UID: \033[33m{}\033[0m' \
|
||||||
'\n Badness: \033[33m{}\033[0m, ' \
|
'\n badness: \033[33m{}\033[0m, ' \
|
||||||
'oom_score: \033[33m{}\033[0m, ' \
|
'oom_score: \033[33m{}\033[0m, ' \
|
||||||
'oom_score_adj: \033[33m{}\033[0m' \
|
'oom_score_adj: \033[33m{}\033[0m' \
|
||||||
'\n VmSize: \033[33m{}\033[0m MiB' \
|
'\n VmSize: \033[33m{}\033[0m MiB' \
|
||||||
@ -705,7 +767,8 @@ def find_victim_and_send_signal(signal):
|
|||||||
'File: \033[33m{}\033[0m MiB, ' \
|
'File: \033[33m{}\033[0m MiB, ' \
|
||||||
'Shmem: \033[33m{}\033[0m MiB)' \
|
'Shmem: \033[33m{}\033[0m MiB)' \
|
||||||
'\n VmSwap: \033[33m{}\033[0m MiB' \
|
'\n VmSwap: \033[33m{}\033[0m MiB' \
|
||||||
'\n CmdLine: \033[33m{}\033[0m'.format(
|
'\n environ:\n\033[33m{}\033[0m' \
|
||||||
|
'\n cmdline: \033[33m{}\033[0m'.format(
|
||||||
name,
|
name,
|
||||||
pid,
|
pid,
|
||||||
uid,
|
uid,
|
||||||
@ -718,8 +781,14 @@ def find_victim_and_send_signal(signal):
|
|||||||
file_rss,
|
file_rss,
|
||||||
shmem_rss,
|
shmem_rss,
|
||||||
str(vm_swap).rjust(len_vm),
|
str(vm_swap).rjust(len_vm),
|
||||||
cmdline)
|
environ,
|
||||||
|
cmdline
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
|
|
||||||
|
|
||||||
|
# нахер такое ветвление
|
||||||
|
|
||||||
victim_info = '\033[4mFound a process with highest badness:\033[0m' \
|
victim_info = '\033[4mFound a process with highest badness:\033[0m' \
|
||||||
'\n Name: \033[33m{}\033[0m' \
|
'\n Name: \033[33m{}\033[0m' \
|
||||||
'\n PID: \033[33m{}\033[0m' \
|
'\n PID: \033[33m{}\033[0m' \
|
||||||
@ -979,6 +1048,7 @@ status_names = []
|
|||||||
for s in status_list:
|
for s in status_list:
|
||||||
status_names.append(s.split(':')[0])
|
status_names.append(s.split(':')[0])
|
||||||
|
|
||||||
|
ppid_index = status_names.index('PPid')
|
||||||
vm_size_index = status_names.index('VmSize')
|
vm_size_index = status_names.index('VmSize')
|
||||||
vm_rss_index = status_names.index('VmRSS')
|
vm_rss_index = status_names.index('VmRSS')
|
||||||
vm_swap_index = status_names.index('VmSwap')
|
vm_swap_index = status_names.index('VmSwap')
|
||||||
|
Loading…
Reference in New Issue
Block a user