From bfe6c718f0a814f8eaaa76345e1918a86eb584fb Mon Sep 17 00:00:00 2001 From: desbma Date: Mon, 25 Jan 2016 22:38:07 +0100 Subject: [PATCH 1/2] Fix #546 --- glances/plugins/glances_processlist.py | 45 ++++++++++++++++---------- glances/processes.py | 2 +- 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/glances/plugins/glances_processlist.py b/glances/plugins/glances_processlist.py index 84e8571b..94eda4ec 100644 --- a/glances/plugins/glances_processlist.py +++ b/glances/plugins/glances_processlist.py @@ -42,6 +42,21 @@ def convert_timedelta(delta): return hours, minutes, seconds, microseconds +def split_process_cmdline(process): + """Return dirname, basename, arguments for a process, with unknown parts set to None. """ + dirname = None + basename = process['name'] + arguments = None + if process['exe'] and process['cmdline'].startswith(process['exe']): + dn, bn = os.path.split(process['exe']) + dirname = dn or None + basename = bn or process['name'] + arguments = process['cmdline'][len(process['exe']):].lstrip() + elif process['cmdline'].startswith(process['name']): + arguments = process['cmdline'][len(process['name']):].lstrip() + return dirname, basename, arguments + + class Plugin(GlancesPlugin): """Glances' processes plugin. @@ -287,31 +302,27 @@ class Plugin(GlancesPlugin): ret.append(self.curse_add_line(msg, optional=True, additional=True)) # Command line - # If no command line for the process is available, fallback to - # the bare process name instead - cmdline = p['cmdline'] - argument = ' '.join(cmdline.split()[1:]) + dirname, name, arguments = split_process_cmdline(p) try: - if cmdline == '': - msg = ' {0}'.format(p['name']) + if (dirname is None) and (arguments is None): + msg = ' {0}'.format(name) ret.append(self.curse_add_line(msg, splittable=True)) elif args.process_short_name: - msg = ' {0}'.format(p['name']) + msg = ' {0}'.format(name) ret.append(self.curse_add_line(msg, decoration='PROCESS', splittable=True)) - msg = ' {0}'.format(argument) + msg = ' {0}'.format(arguments) ret.append(self.curse_add_line(msg, splittable=True)) else: - cmd = cmdline.split()[0] - path, basename = os.path.split(cmd) - if os.path.isdir(path): - msg = ' {0}'.format(path) + os.sep + if dirname is not None: + msg = ' {0}'.format(dirname) + os.sep ret.append(self.curse_add_line(msg, splittable=True)) - ret.append(self.curse_add_line(basename, decoration='PROCESS', splittable=True)) + msg = name else: - msg = ' {0}'.format(basename) - ret.append(self.curse_add_line(msg, decoration='PROCESS', splittable=True)) - msg = ' {0}'.format(argument) - ret.append(self.curse_add_line(msg, splittable=True)) + msg = ' {0}'.format(name) + ret.append(self.curse_add_line(msg, decoration='PROCESS', splittable=True)) + if arguments is not None: + msg = ' {0}'.format(arguments) + ret.append(self.curse_add_line(msg, splittable=True)) except UnicodeEncodeError: ret.append(self.curse_add_line('', splittable=True)) diff --git a/glances/processes.py b/glances/processes.py index 31c76e46..42e037b1 100644 --- a/glances/processes.py +++ b/glances/processes.py @@ -377,7 +377,7 @@ class GlancesProcesses(object): try: procstat.update(proc.as_dict( attrs=['username', 'cpu_percent', 'memory_percent', - 'name', 'cpu_times'], ad_value='')) + 'name', 'exe', 'cpu_times'], ad_value='')) except psutil.NoSuchProcess: # Try/catch for issue #432 return None From 17a2a2f57e25f2dcd510cb3051288375c3f30be1 Mon Sep 17 00:00:00 2001 From: desbma Date: Mon, 25 Jan 2016 22:49:17 +0100 Subject: [PATCH 2/2] Fix indentation --- glances/plugins/glances_processlist.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/glances/plugins/glances_processlist.py b/glances/plugins/glances_processlist.py index 94eda4ec..fc774b87 100644 --- a/glances/plugins/glances_processlist.py +++ b/glances/plugins/glances_processlist.py @@ -48,12 +48,12 @@ def split_process_cmdline(process): basename = process['name'] arguments = None if process['exe'] and process['cmdline'].startswith(process['exe']): - dn, bn = os.path.split(process['exe']) - dirname = dn or None - basename = bn or process['name'] - arguments = process['cmdline'][len(process['exe']):].lstrip() + dn, bn = os.path.split(process['exe']) + dirname = dn or None + basename = bn or process['name'] + arguments = process['cmdline'][len(process['exe']):].lstrip() elif process['cmdline'].startswith(process['name']): - arguments = process['cmdline'][len(process['name']):].lstrip() + arguments = process['cmdline'][len(process['name']):].lstrip() return dirname, basename, arguments