From e44943ccee81834c440c797c3973f024f80f15e1 Mon Sep 17 00:00:00 2001 From: PySimpleGUI Date: Tue, 16 Mar 2021 08:06:24 -0400 Subject: [PATCH] Addition of command line used to launch the process. Updated keys to be compliant with coding guidelines --- DemoPrograms/Demo_psutil_Kill_Processes.py | 36 ++++++++++++++-------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/DemoPrograms/Demo_psutil_Kill_Processes.py b/DemoPrograms/Demo_psutil_Kill_Processes.py index 5eaf57f8..2163452e 100644 --- a/DemoPrograms/Demo_psutil_Kill_Processes.py +++ b/DemoPrograms/Demo_psutil_Kill_Processes.py @@ -12,6 +12,8 @@ CONFIRM_KILLS = False """ Utility to show running processes, CPU usage and provides way to kill processes. Based on psutil package that is easily installed using pip + + Copyright 2021 PySimpleGUI """ def kill_proc_tree(pid, sig=signal.SIGTERM, include_parent=True, @@ -37,12 +39,21 @@ def kill_proc_tree(pid, sig=signal.SIGTERM, include_parent=True, def show_list_by_name(window): psutil.cpu_percent(interval=.1) procs = psutil.process_iter() - all_procs = [[proc.cpu_percent(), proc.name(), proc.pid] for proc in procs] + all_procs = [] + for proc in procs: + pinfo = [proc.cpu_percent(), proc.name(), proc.pid] + try: + cmd = proc.cmdline() + pinfo.append(' '.join(cmd)) + except: + pinfo.append('') + all_procs.append(pinfo) + # all_procs = [[proc.cpu_percent(), proc.name(), proc.pid, proc.cmdline()] for proc in procs] sorted_by_cpu_procs = sorted(all_procs, key=operator.itemgetter(1), reverse=False) display_list = [] for process in sorted_by_cpu_procs: - display_list.append('{:5d} {:5.2f} {}\n'.format(process[2], process[0] / 10, process[1])) - window['-processes-'].update(display_list) + display_list.append('{:5d} {:5.2f} {} {}\n'.format(process[2], process[0] / 10, process[1], process[3])) + window['-PROCESSES-'].update(display_list) return display_list def main(): @@ -52,9 +63,9 @@ def main(): layout = [[sg.Text('Process Killer - Choose one or more processes', size=(45,1), font=('Helvetica', 15), text_color='yellow')], - [sg.Listbox(values=[' '], size=(50, 30), select_mode=sg.SELECT_MODE_EXTENDED, font=('Courier', 12), key='-processes-')], + [sg.Listbox(values=[' '], size=(90, 30), select_mode=sg.SELECT_MODE_EXTENDED, font=('Courier', 12), key='-PROCESSES-')], [sg.Text('Click refresh once or twice.. once for list, second to get CPU usage')], - [sg.Text('Filter by typing name', font='ANY 14'), sg.Input(size=(15,1), font='any 14', key='-filter-')], + [sg.Text('Filter by typing name', font='ANY 14'), sg.Input(size=(15,1), font='any 14', key='-FILTER-')], [sg.Button('Sort by Name', ), sg.Button('Sort by % CPU', button_color=('white', 'DarkOrange2')), sg.Button('Kill', button_color=('white','red'), bind_return_key=True), @@ -90,16 +101,16 @@ def main(): # display_list = [] # for process in sorted_by_cpu_procs: # display_list.append('{:5d} {:5.2f} {}\n'.format(process[2], process[0]/10, process[1])) - # window['-processes-'].update(display_list) + # window['-PROCESSES-'].update(display_list) elif event == 'Kill': - processes_to_kill = values['-processes-'] + processes_to_kill = values['-PROCESSES-'] for proc in processes_to_kill: pid = int(proc[0:5]) # if sg.popup_yes_no('About to kill {} {}'.format(pid, proc[12:]), keep_on_top=True) == 'Yes': try: kill_proc_tree(pid=pid) except: - sg.popup_no_wait('Error killing process', auto_close_duration=2, auto_close=True, keep_on_top=True) + sg.popup_non_blocking('Error killing process', auto_close_duration=2, auto_close=True, keep_on_top=True) elif event == 'Sort by % CPU': psutil.cpu_percent(interval=.1) procs = psutil.process_iter() @@ -108,17 +119,16 @@ def main(): display_list = [] for process in sorted_by_cpu_procs: display_list.append('{:5d} {:5.2f} {}\n'.format(process[2], process[0]/10, process[1])) - window['-processes-'].update(display_list) + window['-PROCESSES-'].update(display_list) else: # was a typed character if display_list is not None: new_output = [] for line in display_list: - if values['-filter-'] in line.lower(): + if values['-FILTER-'] in line.lower(): new_output.append(line) - window['-processes-'].update(new_output) + window['-PROCESSES-'].update(new_output) window.close() if __name__ == "__main__": - main() - \ No newline at end of file + main() \ No newline at end of file