diff options
author | nicolargo <nicolas@nicolargo.com> | 2022-03-13 14:06:58 +0100 |
---|---|---|
committer | nicolargo <nicolas@nicolargo.com> | 2022-03-13 14:06:58 +0100 |
commit | aab36bbcd860ed69a7b772ec074df715a67d93bc (patch) | |
tree | cac78dea84fcfd661f55c81cfa262987c592ccb1 /glances | |
parent | 5bf520f529899d5ef4558d7c8317fdb19deee672 (diff) |
Kill is now compatible with Programs
Diffstat (limited to 'glances')
-rw-r--r-- | glances/outputs/glances_curses.py | 56 | ||||
-rw-r--r-- | glances/plugins/glances_processlist.py | 2 | ||||
-rw-r--r-- | glances/processes.py | 1 |
3 files changed, 37 insertions, 22 deletions
diff --git a/glances/outputs/glances_curses.py b/glances/outputs/glances_curses.py index 8cf24629..3cd540ca 100644 --- a/glances/outputs/glances_curses.py +++ b/glances/outputs/glances_curses.py @@ -692,26 +692,8 @@ class _GlancesCurses(object): # Display kill process confirmation popup # Only in standalone mode (cs_status is None) - if self.kill_process and cs_status is None and not self.args.programs: - selected_process_raw = stats.get_plugin('processlist').get_raw()[self.args.cursor_position] - confirm = self.display_popup( - 'Kill process: {} (pid: {}) ?\n\nConfirm ([y]es/[n]o): '.format( - selected_process_raw['name'], selected_process_raw['pid'] - ), - popup_type='yesno', - ) - if confirm.lower().startswith('y'): - try: - ret_kill = glances_processes.kill(selected_process_raw['pid']) - except Exception as e: - logger.error('Can not kill process {} ({})'.format(selected_process_raw['name'], e)) - else: - logger.info( - 'Kill signal has been sent to process {} (return code: {})'.format( - selected_process_raw['name'], ret_kill - ) - ) - + if self.kill_process and cs_status is None: + self.kill_process(stats.get_plugin('processlist').get_raw()[self.args.cursor_position]) elif self.kill_process and cs_status is not None: self.display_popup('Kill process only available for local processes') self.kill_process = False @@ -722,6 +704,40 @@ class _GlancesCurses(object): return True + def kill_process(self, process): + """Kill a process, or a list of process if the process has a childrens field. + + :param process + :return: None + """ + logger.debug("Selected process to kill: {}".format(process)) + + if 'childrens' in process: + pid_to_kill = process['childrens'] + else: + pid_to_kill = [process['pid']] + + confirm = self.display_popup( + 'Kill process: {} (pid: {}) ?\n\nConfirm ([y]es/[n]o): '.format( + process['name'], + ', '.join(map(str,pid_to_kill)), + ), + popup_type='yesno', + ) + + if confirm.lower().startswith('y'): + for pid in pid_to_kill: + try: + ret_kill = glances_processes.kill(pid) + except Exception as e: + logger.error('Can not kill process {} ({})'.format(pid, e)) + else: + logger.info( + 'Kill signal has been sent to process {} (return code: {})'.format( + pid, ret_kill + ) + ) + def __display_header(self, stat_display): """Display the firsts lines (header) in the Curses interface. diff --git a/glances/plugins/glances_processlist.py b/glances/plugins/glances_processlist.py index 5af1adde..29d0602d 100644 --- a/glances/plugins/glances_processlist.py +++ b/glances/plugins/glances_processlist.py @@ -591,7 +591,7 @@ class Plugin(GlancesPlugin): if not self.args.programs: msg = self.layout_header['command'].format('Command', "('k' to kill)" if args.is_standalone else "") else: - msg = self.layout_header['command'].format('Programs', "(kill not available)") + msg = self.layout_header['command'].format('Programs', "('k' to kill)" if args.is_standalone else "") ret.append(self.curse_add_line(msg, sort_style if process_sort_key == 'name' else 'DEFAULT')) def __msg_curse_sum(self, ret, sep_char='_', mmm=None, args=None): diff --git a/glances/processes.py b/glances/processes.py index 91412a48..1cbcc1bb 100644 --- a/glances/processes.py +++ b/glances/processes.py @@ -23,7 +23,6 @@ from glances.compat import iterkeys from glances.globals import BSD, LINUX, MACOS, WINDOWS from glances.timer import Timer, getTimeSinceLastUpdate from glances.filter import GlancesFilter -from glances.programs import processes_to_programs from glances.logger import logger import psutil |